как использовать дженерики в Scala



Я закодировал этот компонент, чтобы чередовать разные языки:



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
}

}


Меня интересует, как использовать параметризацию, чтобы построить такой компонент, а затем настроить его с различными языками, заданными его параметру?

664   2  

2 ответов:

Я не думаю, что вам действительно нужен дженерик в этом случае.

Также... ваш дизайн чувствует, что в нем что-то не так. В любом случае... если вы думаете, что у вас есть прецедент для дженериков... вы можете сделать это таким образом.

Измените свою черту a liitle

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 
  }

}

Ваш код выглядит простым и чистым, я не уверен, что дженерики улучшат его.

Но вы можете перенести реализацию Lang в язык. Вы должны были бы передать объекты языка в качестве аргументов метода, возможно, как имплициты. Тип аргументов будет T

Я, вероятно, предпочел бы придерживаться вашей простой таблицы поиска, но изменить класс Lang на object Language, сопутствующий объект языковой черты.

Comments

    Ничего не найдено.