Scala 不知道我的任务要去哪里

Scala 不知道我的任务要去哪里,scala,Scala,今天,我在为存储在映射中的case类实例中的var字段赋值时遇到了一些问题。以下是repl中的一个简单会话,演示问题: scala> case class X(var x: Int) defined class X scala> val m = Map('x -> X(1)) m: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1)) scala> m res0: scala.collection.

今天,我在为存储在映射中的case类实例中的
var
字段赋值时遇到了一些问题。以下是repl中的一个简单会话,演示问题:

scala> case class X(var x: Int)
defined class X

scala> val m = Map('x -> X(1))
m: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))

scala> m
res0: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))

scala> m('x).x = 7

scala> m
res1: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1))

scala> val x = m('x)
x: X = X(1)

scala> x.x = 7
x.x: Int = 7

scala> x
res2: X = X(7)

scala> m
res3: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(7))

scala> m('x).x_=(8)

scala> m
res5: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(8))
第一次尝试赋值没有任何作用。但是,将实例存储在val中,然后进行赋值,就像直接调用字段的赋值方法一样

我使用的是Scala 2.9.2

如果这是预期的行为,如果有人能向我解释一下,那就太好了,因为我现在似乎无法理解它。如果这是一个bug,那么最好也知道

不管是哪种方式,知道第一个
m('x).x=7
赋值的去向也是很有趣的。我想某些东西正在某处发生变异——我只是不知道那可能是什么


更新:这似乎只发生在repl中。我只是试着编译代码,任务按预期进行。那么,repl对我的作业做了什么呢?

这似乎是一个bug。如果每夜执行2.10次,则会抛出错误消息:

scala> m('x).x = 7
<console>:10: error: ')' expected but string literal found.
 + "m(scala.Symbol("x")).x: Int = " + `$ires0` + "\n" 
                    ^
scala>m('x).x=7
:10:错误:“)”应为,但找到字符串文字。
+“m(scala.Symbol(“x”)).x:Int=“+`$ires0`+”\n”
^

我为此创建了一个范例。

@这个范例只适用于地图的键。@mattb我的错。我删除了我的评论。从您的记录单上看,它实际上也导致了2.9.2 repl中的错误,但没有显示任何错误。是这样吗?谢谢你提供的信息,也谢谢你制作了这张票!