3

私は次のような単純なコンテナ特性を持っています:

trait Handler {
  def apply[In, Out](in: In): Out
}

実装しようとすると:

new Handler {
  def apply[Any, Unit](in: Any) = println(in)
}

エラーが発生します:

[error]  found   : scala.Unit
[error]  required: Unit(in method apply)
[error]       def apply[Any, Unit](in: Any) = println(in)

どうしてこれなの?このコンパイラ エラーを修正できますか?

4

3 に答える 3

0

このソリューションはどうですか?

trait Handler {
  type In
  type Out

  def apply(in: In): Out
}

new Handler {
  type In=Any
  type Out=Unit

  override def apply(in: In):Out = println(in)
}
于 2013-05-21T15:00:40.497 に答える
0

まず、抽象 (実装されていない) メソッドでクラスを作成することはできません。キーワードの前に変更または追加するclass必要があります。traitabstractclass

apply メソッドを実装する場合Unit、このメソッドの型変数であり、メソッドの型を scala.Unit として推論する scala は、Predef.printlnメソッドの結果の型であるためです。

于 2013-05-21T10:36:10.523 に答える