我想从函数返回一个类型。例如:斯卡拉 - 返回类型
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