Scala: Как передать строковые переменные для доступа к значениям объекта? - PullRequest
0 голосов
/ 22 января 2020

У меня есть объект

object Constants {
  val getA = "example.a.test"
  val getB = "example.b.test"
  val getC = "example.c.test"
        .
        .
        .
}

У меня есть другой класс, к которому я обращаюсь к этим значениям после импорта класса в if-else l oop

if(str == "A") {
   println(Constants.getA)
}
else if (str == "B") {
   println(Constants.getB)
} else {
   println(Constants.getC)
}
// and so on...

ПРИМЕЧАНИЕ Это всего лишь пример кода, который у меня есть, но циклы if-else усложняются. Есть ли способ упростить это, передав переменную "str" ​​непосредственно объекту, например "Constants.get$str", или что-то более простое? Я получаю Cyclomati c сложность Scala проверка стиля предупреждения

Ответы [ 2 ]

2 голосов
/ 22 января 2020

вы можете использовать объект ключ / значение для обработки вашего кода

, например, использовать карту:

object Constants {
val get = Map("A" -> "example.a.test", "B" -> "example.b.test", "C" -> "example.c.test" , ...)
}

, и вы можете использовать его как

println( get("A"))

вместо всего, если еще l oop, который у вас был. Вы можете даже перебирать ключи или значения:

  get.keys.foreach{ i =>  
     print( "Key = " + i )
     println(" Value = " + get(i) )}

Я думаю, что этот способ может быть проще, и я надеюсь, что ответ полезен.

2 голосов
/ 22 января 2020

Вы можете использовать сопоставление с образцом и создать новую функцию в константе.

def getString(str: String) = {
 str match {
  case "A" => "example.a.test"
  case "B" => "example.b.test"
  case "C" => "example.c.test"
  case _ => "Wrong input"
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...