스 카라의 다른 목록을 기반으로 매니페스트를 정의 할 수 있습니까?Scala의 다른 목록을 기반으로 매니페스트를 정의 할 수 있습니까?
저는 스칼라 선언 정보가 동적으로 사용되지 않기 때문에 이것이 가능하지 않다는 믿음을 사퇴했습니다.
여기에 문제가 있습니다. 나는 여러 유형의 객체를 반환 할 수있는 함수를 가지고 있습니다. (String, Int, List [Int], List [List [String]] 등) 이러한 여러 유형을 지원하기 위해 반환 유형은 Any로 설정되었지만 만기가되었습니다. 지우기를 입력하려면 목록,지도 등에서 지원되는 유형에 대한 정보가 손실됩니다. 일부 세부 사항을 복구하기 위해 리턴 유형과 함께 Manifest를 리턴합니다.
그러나 반환 된 정보는 다른 목록이나 맵에 배치 된 다음 다른 함수에서 반환 될 수 있습니다. 유형이 이제는 매니페스트에 정의 된 이전 유형의 목록 또는지도라는 사실을 포함하도록 매니페스트를 업데이트하려고합니다. 여기
내가 V1 유형 목록 [지능]의 것을 알고 'V1'의 매니페스트에서 몇 가지 예제 코드def returnWithManifest[T: Manifest](x: T) = (x, manifest[T])
// May return String, Int, List[Int], List[List[String]], ...
def contrivedExample(t: String): (Any, Manifest[_]) = t match {
case "String" => returnWithManifest("test")
case "Int" => returnWithManifest(1)
case "Boolean" => returnWithManifest(true)
case "List[Int]" => returnWithManifest(List(1,2,3))
case "List[List[String]]" =>
returnWithManifest(List(List("a","b"),List("c","d")))
case _ => returnWithManifest(None)
}
scala> val v1 = contrivedExample("List[Int]")
v1: (Any, Manifest[_]) = (List(1, 2, 3),scala.collection.immutable.List[Int])
scala> val x = v1._1
x: Any = List(1, 2, 3)
scala> val m = v1._2
m: scala.reflect.Manifest[_] = scala.collection.immutable.List[Int]
scala> val v2 = List(x)
v2: List[Any] = List(List(1, 2, 3))
의 내가 만들 때 내가 만드는 데 필요한 모든 정보를 가지고 있어야 'V2' 그 타입이 List [List [Int]]임을 확인하는 manifest이지만 대신 List [Any] 만 사용하면됩니다. 아마도 다음과 같은 구문 :
val v2: m = List(x)
val v2 = List[m](x)
을 나는 동적으로 유형을 정의하기 위해 노력하고있어 것 같습니다 실현, 그러나 실제로 정보가 정적으로 알려진 형식의 삭제를 입력 관련 메타 데이터입니다. 나는 이것이 해결 될 수 있다면, 유형 삭제가 해결 될 수 있다고 생각합니다. 그러나, 적어도 내가 같은 것을 할 수 있어야한다고 생각 :
scala> val m2 = m.wrapInList()
m2: scala.reflect.Manifest[_] =
scala.collection.immutable.List[scala.collection.immutable.List[Int]]
정말 이상한 디자인을 사용하기 위해 어떤 제약 조건을 요구하는지 알고 싶습니다. – paradigmatic