如何在Scala中进行隐式转换?

时间:2015-11-05 14:10:59

标签: scala

无法理解为什么我的代码不起作用。我有一个隐含转换的简单特征:

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 } 类是多余的。

0 个答案:

没有答案