2016-08-20 121 views
2

一个简单的例子,让错误,因为let str是私人:有没有办法在内联方法中使用let语句?

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#类体初始化或者我应该重写类是高阶函数像上面?谢天谢地,这不会成为一个问题。

This question is related to this one, but I thought I'd ask again since it has been 5 years.

回答

0

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

type Test() = 
    let str = "Hello" 

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

私有成员可以暴露,这将编译。像上面这样做会令人满意。

+2

你实际上并没有把它变成私人的 - 'member private t.Str = str'工作吗? – ildjarn

+0

只有F#脚本模式,不是交互式。我不介意让let语句在类中公开的方式,而不必通过成员公开它们。事实上,如果str不是'string',而是'^ a',那么我就不能暴露它,因为它会逃避范围。我不得不使用记录来解决这个问题。其实这可能是值得另一个SO的问题......其实,进一步审查这只是一个复杂的情况下,我有。如果'str:'a',我将能够通过上述方法公开 –

相关问题