【发布时间】:2013-10-21 23:43:30
【问题描述】:
在以下代码 sn-p 中(使用 scala 2.10.3)TestClass1 编译时出现错误“value toInt is not a member of String”但 >TestClass2 编译良好:
trait TestTrait {
implicit def test: (String => Int)
}
object TestClass1 extends TestTrait {
implicit val test = (value: String) => value.toInt
}
object TestClass2 extends TestTrait {
implicit def test = (value: String) => value.toInt
}
通过augmentString()提供toInt函数的StringOps隐式转换在TestClass1中没有应用> 但在 TestClass2 中应用得很好。有人可以告诉我为什么会这样以及如何保持 test 为 val 而不是 def?
【问题讨论】:
-
val 在您的 TestClass1 对象的生命周期内只评估一次,因此它不能有任意参数。如果
value是您的 TestClass1 对象的成员,您可以让它工作:object TestClass1 (value:String) { implicit val test => value.toInt }但这可能不是您的想法? -
这只适用于类而不是对象,对吧?我绝对对使用对象很感兴趣。
-
据我所知,它也适用于对象。