2016-06-14 7 views
2

私は、スカラーのタプル内の整数に値を割り当てるにはどうすればよいですか?

var x = ("This is driving me nuts!", 38) 
x._2 = 58 

を次のコードを入力した場合、私は次のエラーを取得します。

error: reassignment to val 
     x._2 = 58 

どのようにこの問題を解決できますか?つまり、タプルの2番目の要素にどのように新しい値を割り当てることができるのでしょうか。

+0

タプルの更新コピーを作成することはできません: 'x.copy(_2 = 58)'または 'val newTuple = x._1 - > 58'。 P.S.不変性を見ることが推奨されています。 – cchantep

+0

私は参照してください。現時点では、メソッドを使用して値を設定できるIntegerクラスがあれば十分です。 Scalaにそのようなクラスがありますか?私はIntegerクラスを見ましたが、setメソッドはありません。 – pythonic

+3

あなたは本当にそれをすべきではありません。それはScalaでそれを行う方法ではありません。 – cchantep

答えて

6

タプルは不変なので、あなたはしません。

代わりに、新しいタプルを作成し、xにそれを割り当てる:物事の「Scalaの道」(ベストプラクティス)はできるだけ不変のすべてを維持することです

x = (x._1, 58) 

を。これには以下が含まれます:理由がある場合にのみvar(可変変数)を使用します。それ以外の場合は、val(不変の値)を使用します。ここで

+3

または 'x.copy(_2 = 58)'です。あなたのタプルに2つ以上の要素が含まれているともっと実用的です – archz

+0

Integerのように振る舞いますが、setメソッドを通してその整数の値を変更するメソッドがあります。そのようにして、私はまだこの不変タプルを使うことができます。 – pythonic

+0

@ pythonic no、標準的な変更可能なIntホルダータイプはありません。あなたは簡単にそれを自分で作成することができます( 'class IntHolder(var x:Int)')。なぜこのようにデータを変更できるか主張していますか?それは良い習慣ではない。 – Jesper

0

が似て質問です:ジェスパーによってカバーされたよう

In Scala, how can I reassign tuple values?

、タプルは不変であり、あなたは新しいものを作成する必要があります。答えよりも簡潔ではないと思っていますが、タプルのコピーメソッドもあり、標準のケースクラスと同じように使用できます。

var tuple = (1, "test") 
tuple = tuple.copy(_2 = "new") 
関連する問題