在Scala中传递案例对象

时间:2014-11-22 17:00:49

标签: scala

我有以下定义:

sealed trait MyTrait
case object One extends MyTrait
case object Two extends MyTrait

object Test extends (MyTrait => MyTraitReturnVal) {

  def apply(myTrait: MyTrait) = { ... }

  def myMethod(myTrait: MyTrait) = {
  ...
  }
}

当我调用Test(One)时,它抱怨它期待一个接口而不是一个具体的类型。关于如何解决这个问题的任何建议?

所以打电话:

Test(One)

抱怨它期待MyTrait,实际参数是One.type!

1 个答案:

答案 0 :(得分:1)

您正在从Function1类继承Test对象,因此您需要实现' apply'方法而不是myMethod'。此代码编译并运行:

  sealed trait MyTrait
  case object One extends MyTrait
  case object Two extends MyTrait

  case class MyTraitReturnVal(my: MyTrait)

  object Test extends (MyTrait => MyTraitReturnVal) {
    def apply(myTrait: MyTrait) =
      new MyTraitReturnVal(myTrait)
  }

  println(Test(One))
  println(Test(Two))