ale*_*bit 2 scala implicit case-class context-bound companion-object
通常,我首先在同一个文件中写一个case class然后是同伴object,就在下面.但是当试图导入implicit同伴中的声明时,我被迫切换声明的顺序(显然我不想要).克服这种情况的建议做法是什么?
对于具体情况,以下代码不起作用:
object SomeLib {
def doSomething[T : List](t: T) = "meh"
}
case class FooWorker(x: String) {
import FooWorker._ // bring the implicit in scope for doSomething
def then(event: String) : FooWorker = {
copy(x = SomeLib.doSomething(event)) // requires implicit
}
}
object FooWorker {
implicit val list = List("a", "b", "c")
}
Run Code Online (Sandbox Code Playgroud)
但如果我object FooWorker在case class FooWorker它确实工作之前宣布.我正在使用Scala 2.11.6和SBT进行测试.非常感谢!
Mar*_*sky 11
问题源于隐式FooWorker.list没有显式声明的类型.如果您完成以下行:
implicit val list: List[String] = List("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)
无论声明的顺序如何,一切都按预期工作.通常,您应始终为隐式值指定显式类型.此规则将在Scala的未来版本中实施.