E1045#
Implementing traits with methods.
最初,MoonBit 允许使用普通方法隐式地实现特征。但我们计划废弃这一行为,只允许用显式的 impl
声明来实现特征。目前,这一废弃处于迁移阶段,MoonBit 依然支持旧的语义,但如果程序使用了普通方法来隐式地实现特征,编译器就会产生该警告。
错误示例#
type MyType Int
fn op_equal(self : MyType, other : MyType) -> Bool {
self._ == other._
}
test {
// `==` 会调用 `Eq::op_equal`
println(MyType(1) == MyType(2))
}
建议#
为需要实现的特征添加显式的 impl
。由于 impl
可以用 .f(..)
语法调用,因此把方法迁移到 impl
是基本无害的,还能让代码的意图变得更清楚。
type MyType Int
impl Eq for MyType with op_equal(self, other) {
self._ == other._
}
test {
println(MyType(1) == MyType(2))
}