如何实现类似F#中method overloading的效果?

即同名方法/函数对不同函数签名的重载。F#不允许重载function,但可以重载method。

type Product = {SKU:string; Price: float} with

    member this.TupleTotal3(qty) =
        this.Price * float qty

    member this.TupleTotal3(qty, discount) =
        (this.Price * float qty) - discount

代码来源:

暂时不支持。因为 MoonBit 里方法也是函数,比如可以用 TypeName::method_name 的语法来直接调用一个方法,或者把方法当成高阶函数用。如果允许方法重载,那把方法当高阶函数用的时候就会有歧义。所以 MoonBit 里方法重载的复杂度和函数重载是一样的,故而暂时不支持

1 个赞