是否有可能基於Scala中的另一個清單定義清單?是否有可能基於Scala中的另一個清單定義清單?
我已經非常想讓自己相信,這是不可能的,因爲Scala Manifest信息並非旨在動態使用。
這是問題所在。我有一個函數可以返回多個類型的對象(String,Int,List [Int],List [List [String]]等)。爲了支持這些多種類型,返回類型設置爲Any,但是到期要輸入刪除,有關列表,地圖等支持類型的信息將丟失。爲了恢復一些細節,我返回一個Manifest和返回類型。
但是,返回的信息可能會放在另一個列表或映射中,然後從另一個函數返回。我想要更新清單以包含這樣的事實,即該類型現在是由清單定義的以前類型的List或Map。
下面是一些示例代碼
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))
從「V1」的清單我知道V1的類型是List [INT]的,所以當我創建「V2」我應該有我需要創建的所有信息清單標識類型是List [List [Int]],但是我只有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