【发布时间】:2012-11-28 03:23:49
【问题描述】:
我想从函数中返回一个类型。例如:
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
}
}
所以我想返回类型本身,将其存储在 Map 中,以便以后在某处应用它:
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(例如classOf[One])方法的java.lang.Class,所以函数的返回类型将是java.lang.Class[Super] -
@om-nom-nom 工作了一半。我仍然无法将返回的类型作为类型参数传递给
doSmth方法... -
这与决定返回什么的问题没有真正的关系,但为什么在这里使用地图?为什么不直接传递函数
decide?
标签: scala types type-systems