如何在Scala中使用泛型 [英] how to use generics in Scala
问题描述
我已经编写了这个组件,以便在不同语言之间切换:
import scala.collection.mutable.Map
密封特质语言
大小写对象英语扩展语言{
val消息:地图[字符串,字符串] =
地图(M01 - >准备烹饪 - 按START,
M02 - >关闭开始烹饪的门)
}
case对象法语扩展语言{
val消息:Map [String,String] =
Map(M01 - >Pret pour la cuisson - presse START,
M02 - >Fermez la porte pour beginr la cuisson)
}
class Lang {
//默认语言
private var language:Language = English
def selected(lang:Language)= language = lang
def displayMessage(msg:String)=语言匹配{
case English =>英文短信msg
case法语=>法语短信msg
}
}
我的关注点是使用参数化来构建这样一个组件,然后用赋予其参数的不同语言来配置它?
我不认为你真的需要泛型。另外...你的设计感觉有些东西不适合。反正...如果你认为你有泛型的用例...你可以这样做。
改变你的特质
密封特质语言{
val消息:Map [字符串,字符串]
}
现在像这样定义泛型类,
pre $ class Lang [A< ;: Language](var language:A = English){
def selected(lang:A):Unit = {
language = lang
}
$ b $ def displayMessage(msg:String):Unit = {
语言信息msg
}
}
I have coded this component, to alternate between different languages:
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
}
}
My concern is how to use parameterization to build such a component and then to configure it with different languages given to its parameter?
I don't think you really need generic in this case.
Also... your design feels to have something off about it. Anyways... if you think you have a use case for generics... you can do it this way.
Change your trait a liitle
sealed trait Language {
val messages: Map[ String, String ]
}
Now define your generic class like this,
class Lang[ A <: Language ]( var language: A = English ) {
def chosen( lang: A ): Unit = {
language = lang
}
def displayMessage(msg: String): Unit = {
language messages msg
}
}
这篇关于如何在Scala中使用泛型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!