You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F#中如何在同一类的内部引用该类的其他方法?

F#类成员内部调用的解决方案

错误原因

F#语法规定,调用类的成员时不能直接写成员名,必须明确指明成员所属的类型(静态成员)或所属的实例对象(实例成员),你当前的代码直接写addOne,编译器找不到对应的函数定义,因此抛出未定义错误。

静态成员场景修复(你的当前代码适配方案)

静态成员互相调用时,直接补充类名作为前缀即可:

type MathsOperations =
    static member addOne (a : int) : int =
        a + 1

    static member addTwo (a : int) : int =
        // 补充类名前缀明确调用的是当前类的静态成员
        1 + (MathsOperations.addOne a)

实例成员场景通用处理

如果你的类成员是实例成员,需要先给类定义实例标识符(通常用this或者self,可自定义名称),调用时用该标识符作为前缀:

// 带无参构造函数的实例类
type MathsOperations() =
    member this.addOne (a : int) : int =
        a + 1

    member this.addTwo (a : int) : int =
        // 用实例标识符this前缀调用同实例的其他成员
        1 + (this.addOne a)

简化调用小技巧

如果类内有大量静态成员互相调用,不想每次都写全类名,可以在方法内部用open type引入当前类:

type MathsOperations =
    static member addOne (a : int) : int =
        a + 1

    static member addTwo (a : int) : int =
        let open MathsOperations
        // 引入后可直接调用同类型的静态成员
        1 + (addOne a)

内容的提问来源于stack exchange,提问作者ajax2112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:05