#scala
#scala
Вопрос:
У меня есть следующий код scala. В этом коде я передаю (глобальное) строковое имя функции и хочу изменить строку в зависимости от первого аргумента, как показано ниже:
def retVal(x: (String,String), y: => String) = {if (x._1 != "") {y = x._1;x} else (y,x._2)}
Но когда я запускаю этот код, я получаю следующую ошибку:
y = x._1
^
reassignment to a val
Как я могу изменить код, чтобы глобальная строковая переменная обновлялась при вызове этой функции?
Комментарии:
1. Вероятно, вы делаете что-то не так. Обычно вам не нужны функции, подобные вашей
retVal
. Можете ли вы показать нам контекст, в котором вы вызываетеretVal
?
Ответ №1:
Аргументы функции по умолчанию неизменяемы в Scala. Вы не можете присвоить значение a параметру функции.
В вашем случае вы пытаетесь присвоить вызову по имени параметр, что вообще невозможно.
Кроме того, мутация — это плохо, вместо этого возвращайте значение и присваивайте его новой переменной.
Но все же, если вы хотите мутировать, сделайте что-то вроде этого
object MutationBox {
var globalString = ""
def retVal(x: (String,String)) = {
if (x._1.nonEmpty) {
globalString = x._1
x
} else (globalString, x._2)
}
}