是否可以为类的隐式参数表示默认值?
class I[T](val t: T)
class A(i: I[Int])(implicit f: I[Int] => Int) {
implicit object key extends(I[Int] => Int) {
def apply(i: I[Int])= i.t
}
def this() = this(new I(0))(key)
}
上面的代码给出了“错误:找不到:值键”
答案 0 :(得分:3)
您不能在构造函数中引用类的成员,因为该类尚未构造。即key
是A
的成员,因此您无法在类构造函数中引用key
。但是,您可以使用默认参数作为匿名函数:
scala> class A(i: I[Int])(implicit f: I[Int] => Int = { i: I[Int] => i.t } )
defined class A
scala> new A(new I(2))
res1: A = A@29ba4338
或,如果你想让它更干净一点,你可以在A
的伴侣对象中创建一个方法,然后引用它。
case class A(i: I[Int])(implicit f: I[Int] => Int = A.key)
object A {
def key(i: I[Int]): Int = i.t
}
甚至:
case class A(i: I[Int])(implicit f: I[Int] => Int) {
def this() = this(new I(0))(A.key)
}
object A {
def key(i: I[Int]): Int = i.t
}