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
相关产品推荐
相关产品推荐

