2016-08-20 230 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',我將能夠通過上述方法公開 –

相關問題