案例类和伴侣的不同顺序的隐式解决方案

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 FooWorkercase 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的未来版本中实施.