Scala лучший способ инициировать несколько val из значения конструктора - PullRequest
0 голосов
/ 20 октября 2019

я пытаюсь инициализировать несколько значений из значения конструктора

class lines(int value) {
   val line1 : String
   val line2 : String
   def this() {
      if (value >0) {
        line1="positive"
        line2="value"
      } else {
        line1 = "negative"
        line2 = "integer"
   }

Мне нужно получить и инициализировать несколько значений в зависимости от целочисленного значения конструктора. Я знаю, что могу использовать var вместо val или написать два метода для каждого val, но я хочу найти лучший способ решения этой проблемы в scala

Ответы [ 3 ]

3 голосов
/ 20 октября 2019

Я бы использовал сопоставление с образцом для реализации множественного назначения:

class lines(value: Int) {
  val (line1, line2) =
    if (value > 0) {
      ("positive", "value")
    } else {
      ("negative", "integer")
    }
}
3 голосов
/ 20 октября 2019

Попробуйте определить фабрику в объекте-компаньоне , например,

final case class Lines(value: Int, line1: String, line2: String)

object Lines {
  def apply(value: Int): Lines = {
    if (value > 0)
      Lines(value, line1 = "positive", line2 = "value")
    else
      Lines(value, line1 = "negative", line2 = "integer")
  }
}

, что дает

Lines(1)
res0: Lines = Lines(1,positive,value)

Lines(-1)
res1: Lines = Lines(-1,negative,integer)
0 голосов
/ 20 октября 2019

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

class lines(int value) {
    val line1 : String = if(value > 0) "positive" else "negative"
    val line2 : String = if(value > 0) "value" else "integer"
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...