有没有办法在内联方法的类中使用let语句?

时间:2016-08-20 13:48:13

标签: f#

由于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.

1 个答案:

答案 0 :(得分:0)

其实我错了。确实,高阶函数示例在上面的简化情况下工作,但我已经意识到lambda参数不能静态解析。我想过使用一些记录,然后尝试了这个:

type Test() =
    let str = "Hello"

    member t.Str = str
    member inline t.A() = 
        launch t.Str

可以公开私有成员,这将编译。像上面这样做会很满意。