2016-10-18 2 views
0

У меня есть следующий код 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 

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

+0

Вы, вероятно, делаете что-то неправильно. Обычно вам не нужны такие функции, как ваш 'retVal'. Можете ли вы показать нам контекст, в котором вы вызываете 'retVal'? – TeWu

ответ

1

Аргументы функции по умолчанию неизменяемы в Scala. Вы не можете присвоить значение параметру функции.

В вашем случае вы пытаетесь назначить вызов по параметру имени, который вообще невозможен.

Кроме того, mutating is bad вместо этого возвращает значение и назначает его новой переменной.

Но все же, если вы хотите, чтобы мутировать сделать что-то вроде этого

object MutationBox { 
var globalString = "" 

def retVal(x: (String,String)) = { 
    if (x._1.nonEmpty) { 
    globalString = x._1 
    x 
    } else (globalString, x._2) 
} 

}

Смежные вопросы