Scala的隐式转换,假设我有下面的代码片段:为对象
import scala.language.implicitConversions
sealed trait Command {
val typeName: String
}
object Command {
implicit def command2String(implicit c: Command): String =
c.typeName
}
case object SendMessageCommand extends Command {
override val typeName: String = "send_message"
}
我想没有明确的转换比较String
与Command
后裔。例如:
"sendMessage" == SendMessageCommand
问题1:Scala中可能吗?问题2:我可以定义通用隐式转换,将已知类型(如字符串)转换为超类类型(如我的情况下为Command
)?
例如:
implicit def string2Command(implicit s: String): Command = {
case "send_message" => SendMessageCommand
case _ => // some error thrown
}
P.S.我知道这不是惯用的斯卡拉,但是找到正确的方法真是太棒了。
谢谢。 Q2:我的意思是我可以定义一种转换,它不会转换为特定类型,而是转换为其超类型。如果不够清楚,我会更新这个问题。 –
好吧,答案是“是的,你可以”......我仍然不明白为什么你需要问它。你尝试过,并得到某种错误? – Dima