无法理解为什么我的代码不起作用。我有一个隐含转换的简单特征:
DayN
在同一个包中我有一个实现:
trait Bool {
impl =>
implicit def bool2Ops(b: Boolean): BoolOps = BoolOps(b)
case class BoolOps(a: Boolean) {
def or (b: Boolean) = impl.or (a,b)
def and(b: Boolean) = impl.and(a,b)
}
def and(a: Boolean, b: Boolean): Boolean
def or (a: Boolean, b: Boolean): Boolean
}
但我的转换不起作用。有什么想法吗?
UPD
正如@RüdigerKlaehn所说,我的class PlainBool extends Bool {
def and(a: Boolean, b: Boolean): Boolean = a && b
def or (a: Boolean, b: Boolean): Boolean = a || b
}
object PlainBool extends App {
// ok
val res = new PlainBool().and(true, false)
println {res}
// failed
println { true.and(false) }
}
伴侣对象没有扩展我的PlainBool
特征。因此,它没有看到隐式转换函数。所以我需要的是让Bool
对象扩展特征,这应该修复范围:
PlainBool
在这种情况下,object PlainBool extends Bool with App {
println { true and false }
def and(a: Boolean, b: Boolean): Boolean = a && b
def or (a: Boolean, b: Boolean): Boolean = a || b
}
类是多余的。