如何在scala中为元组中的整数赋值?

如何在scala中为元组中的整数赋值?,scala,Scala,如果我键入以下代码 var x = ("This is driving me nuts!", 38) x._2 = 58 我得到以下错误 error: reassignment to val x._2 = 58 我怎样才能解决这个问题?我的意思是,我怎么能给元组的第二个元素赋值呢。你不能,因为元组是不可变的 相反,创建一个新元组并将其分配给x: x = (x._1, 58) 做事情的“Scala方式”(最佳实践)是尽可能保持一切不变。这包括:只有在有充分理由的情况下才使用

如果我键入以下代码

var x = ("This is driving me nuts!", 38)
x._2 = 58
我得到以下错误

error: reassignment to val
         x._2 = 58

我怎样才能解决这个问题?我的意思是,我怎么能给元组的第二个元素赋值呢。

你不能,因为元组是不可变的

相反,创建一个新元组并将其分配给
x

x = (x._1, 58)

做事情的“Scala方式”(最佳实践)是尽可能保持一切不变。这包括:只有在有充分理由的情况下才使用
var
(可变变量);否则,请使用
val
(不可变值)。

这里有一个类似的问题:

正如Jesper所述,元组是不可变的,您应该创建一个新元组。我不确定它是否比他的答案更简洁,但是元组上还有一个copy方法,您可以像使用标准case类一样使用它

var tuple = (1, "test")
tuple = tuple.copy(_2 = "new")

不能,但可以创建元组的更新副本:
x.copy(_2=58)
val newTuple=x.\u 1->58
。顺便说一下,建议你看看不变性。我明白了。此时,有一个Integer类就足够了,我们可以在其中使用方法设置值。Scala中有这样的类吗。我看到了Integer类,它没有任何set方法。你真的不应该这样做。我明白了,在Scala中这远远不是一种方法。这里的复制意味着如果我使用一个对象,只会复制它的引用,对吗?不,
copy
不仅仅复制引用,它还会创建一个新对象。或者
x.copy(_2=58)
。更实用的是,如果元组包含2个以上的元素,则有一个行为类似Integer的类,但有一个方法可以通过set方法更改该整数的值。这样,我仍然可以使用这个不可变元组。@pythonic不,没有标准的可变
Int
holder类型。您可以轻松地自己创建它(
classintholder(var x:Int)
),但为什么您坚持以这种方式创建可变数据呢?这不是一个好的实践。优秀的最佳实践总结-通过下划线.io