4

私はこの方法を持っています:

scala> def foo(traversable: Traversable[{def toByte: Byte}]) = {
     | traversable.map(_.toByte)
     | }
foo: (traversable: Traversable[AnyRef{def toByte: Byte}])Traversable[Byte]

しかし、私はそれを次のように呼び出すと:

scala> foo(List(1,2,3))

私は得る:

java.lang.NoSuchMethodException
    at scala.runtime.BoxesRunTime.toByte(Unknown Source)
    at $anonfun$foo$1.apply(<console>:8)
    at $anonfun$foo$1.apply(<console>:8)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
    at scala.collection.immutable.List.foreach(List.scala:45)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
    at scala.collection.immutable.List.map(List.scala:45)
    at .foo(<console>:8)

しかし、私がこのようなことをすると:

scala> 1.toByte
res1: Byte = 1

できます。

私はおそらく見落としているほど基本的なものを見逃していますが、どうすればこれを機能させることができますか?

4

1 に答える 1

10

Int の sybtype で AnyValあるため、明示的に宣言する必要があります。

def foo(xs: Traversable[AnyVal { def toByte: Byte }]) = xs.map(_.toByte) 
于 2012-03-26T04:46:29.530 に答える