由于let str
是私有的,因此提供错误的简化示例:
let launch = printfn "%s"
type Test() =
let str = "Hello"
member inline t.A() =
launch str
我在F#中发现了静态解析的类型参数,并且在重写之后有一个神经网络库,其中95%的函数被内联,包括类方法。我最初把它写成F#脚本,忘记了脚本模式和编译模式在内联方法处理方面的区别。
let test = // Is this the only choice?
let str = "Hello"
fun () ->
launch str
有没有办法在F#类中使用body初始化器,还是应该将类重写为高阶函数,如上所述?值得庆幸的是,这不是问题。
This question is related to this one, but I thought I'd ask again since it has been 5 years.
答案 0 :(得分:0)
其实我错了。确实,高阶函数示例在上面的简化情况下工作,但我已经意识到lambda参数不能静态解析。我想过使用一些记录,然后尝试了这个:
type Test() =
let str = "Hello"
member t.Str = str
member inline t.A() =
launch t.Str
可以公开私有成员,这将编译。像上面这样做会很满意。