다음 코드 정의 : 한편왜 ClassManifest는 Array가 필요하지만 List는 필요하지 않습니까?
scala> def test[T](iter:java.util.Iterator[Any], func:Any=>T):Array[T] =
| iter.map(i=>func(i)).toArray
<console>:11: error: could not find implicit value for evidence parameter of
type ClassManifest[T]
iter.map(i=>func(i)).toArray
^
사용하여 아래의 대체 코드 : 여기
import scala.collection.JavaConversions._
val iter:java.util.Iterator[Any] = Array[Any](1, 2, 3).iterator
def func(a:Any):String = a.toString
def test[T:ClassManifest](iter:java.util.Iterator[Any], func:Any=>T):Array[T] =
iter.map(i=>func(i)).toArray
def testFunc = test(iter, func)
을, 나는 그렇지 않으면 나는 오류, 제대로 컴파일하는 ClassManifest
를 사용할 필요가 List
이 필요하지 않고 잘 컴파일됩니다. testFunc
및 testFunc1
의 최종 출력이 동일하다는
import scala.collection.JavaConversions._
val iter:java.util.Iterator[Any] = Array[Any](1, 2, 3).iterator
def func(a:Any):String = a.toString
def test1[T](iter:java.util.Iterator[Any], func:Any=>T):List[T] =
iter.map(i=>func(i)).toList
def testFunc1 = test1(iter, func).toArray
참고.
어떻게 List
버전은 ClassManifest
이 필요하지 않습니까?
당신과 천사의 대답은 함께 올바른 답을 결합했습니다 :) – Jus12