2016-10-18 17 views
0

私は以下のスカラーコードを持っています。このコードでは、私は、関数に(グローバル)文字列名を渡すと、以下に示すように、最初の引数に応じて、文字列を変更したいのです:名前スカラによる関数引数の受け渡し

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

}この

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

ような何かを変異させたい場合。通常、 'retVal'のような関数は必要ありません。 'retVal'を呼んでいるコンテキストを表示できますか? – TeWu

答えて

1

関数の引数は、デフォルトではScalaでは変更できません。関数のパラメータにaの値を代入することはできません。

あなたのケースでは、可能ではない名前paramによる呼び出しに割り当てようとしています。

また、変異が悪い代わりに値を返し、新しい変数に割り当てます。

しかし、まだあなたはおそらく何か間違ったことをやっている

関連する問題