我想從函數返回一個類型。例如:斯卡拉 - 返回類型
class Super
case class One(a: Int) extends Super
case class Two(b: Float) extends Super
case class Unknown extends Super
def decide(criterion: String): ??? = {
criterion match {
case "one" => One
case "two" => Two
case _ => Unknown
}
}
所以我想返回類型本身,將其存儲在一張地圖,這樣我可以某處後應用它:
val test = Buffer(
("ahaha" -> "one")
("ohoho" -> "two")
("lalala" -> "one")
)
var map = scala.collection.mutable.Map[String, Super]()
test.map {pair =>
map(pair._1) = decide(pair._2)
}
這樣,以後我會想:
def act(code: String) {
map(code) match {
case One => doSmth[One]()
case Two => doSmth[Two]()
case _ => doNothing()
}
}
我知道某些部件,像案例類的未使用的參數在這裏可能看起來很奇怪,但這是它在我工作的環境中的樣子,這個例子是完整的,因爲我不確定是否它會我不同,如果我拿走東西...
那麼我怎樣才能使decide
函數返回一個類型,然後以類似於我所顯示的方式使用它?
你可能會用'classOf' java.lang.Class中(如classOf [一])的函數方法,以便返回類型將是' java.lang.Class [Super]' –
@ om-nom-nom工作了一半。仍然我無法將返回的類型作爲類型參數傳遞給'doSmth'方法... – noncom
這與確定返回的內容並沒有什麼關係,但爲什麼要在這裏使用地圖呢?爲什麼不相反只是傳遞函數'決定'? – drstevens