我已经编码了这个组件,以在不同的语言之间切换:
import scala.collection.mutable.Map
sealed trait Language
case object English extends Language {
val messages: Map[String, String] =
Map("M01" -> "Ready for cooking - press START",
"M02" -> "Close the door to start cooking")
}
case object French extends Language {
val messages: Map[String, String] =
Map("M01" -> "Pret pour la cuisson - presse START",
"M02" -> "Fermez la porte pour commencer la cuisson")
}
class Lang {
//The default Language
private var language: Language = English
def chosen(lang: Language) = language = lang
def displayMessage(msg: String) = language match {
case English => English messages msg
case French => French messages msg
}
}
我关心的是如何使用参数化来构建这样的组件,然后使用为其参数指定的不同语言来配置它?
最佳答案
我认为在这种情况下你真的不需要泛型。
另外...你的设计感觉有些不对劲。无论如何...如果您认为您有泛型的用例...您可以这样做。
稍微改变一下你的特质
sealed trait Language {
val messages: Map[ String, String ]
}
现在像这样定义你的泛型类,
class Lang[ A <: Language ]( var language: A = English ) {
def chosen( lang: A ): Unit = {
language = lang
}
def displayMessage(msg: String): Unit = {
language messages msg
}
}
关于scala - 如何在 Scala 中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531913/