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。 –