我有这个方法:
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它起作用了。
我可能遗漏了一些基本的东西,以至于我忽略了它,但是我如何才能让它工作呢?
发布于 2012-03-26 12:46:30
Int is sybtype of AnyVal,所以您需要显式声明它。
def foo(xs: Traversable[AnyVal { def toByte: Byte }]) = xs.map(_.toByte) https://stackoverflow.com/questions/9866468
复制相似问题