1
tacit programming的一個想法是不能將參數應用於函數,如果可以避免的話。通過默認編程實現F#接口
如果函數是第一類成員,爲什麼F#不允許這樣編譯?
type IAdder =
interface
abstract member Add : int -> int -> int
end
type Adder =
interface IAdder with
member this.Add x y = x + y
type AdderWithInnerAdder(adder:IAdder) =
interface IAdder with
member this.Add = adder.Add
我得到的編譯錯誤...
沒有抽象屬性發現,對應於這個覆蓋
我覺得這應該編譯。 adder.Add
明確實施了IAdder.Add
並且應該是可以接受的。
我喜歡,有接近這一個功能更強大的方式。約束是我必須與用C#編寫的代碼進行互操作。感謝您的回答。 – t3dodson
@ t3dodson如果您需要與C#進行互操作,那麼在您的界面中也應該避免使用curried參數。在C#代碼中使用'FSharpFunc's不會帶來慣用的體驗。 – TheInnerLight
@TheInnerLight,他們只從F#一邊看咖啡。成員函數和let-bound函數被編譯爲普通方法,而不考慮currying。 –