以下的F#代码成功编译:
错误FS0043:成员或对象构造函数“op_Multiply”不是公共的。私有成员只能从声明类型内部访问。受保护的成员只能从派生类型中访问,并且不能从内部lambda表达式中访问。
这个错误听起来不对:
- 它说操作符不是公共的,但在类级别上实际上是公共的。 - 如果使用静态方法替代(*)操作符,则没有错误。
namespace MyNamespace
module Module =
type T =
static member (*) (t1: T, t2: T): T = Unchecked.defaultof<T>
type U =
member __.Method(t1: T, t2: T) = t1 * t2
然而,如果在Module上添加private修饰符,则会生成错误:
namespace MyNamespace
module private Module =
type T =
static member (*) (t1: T, t2: T): T = Unchecked.defaultof<T>
type U =
member __.Method(t1: T, t2: T) = t1 * t2 //error
错误FS0043:成员或对象构造函数“op_Multiply”不是公共的。私有成员只能从声明类型内部访问。受保护的成员只能从派生类型中访问,并且不能从内部lambda表达式中访问。
这个错误听起来不对:
- 它说操作符不是公共的,但在类级别上实际上是公共的。 - 如果使用静态方法替代(*)操作符,则没有错误。
?