Scala 不知道我的任务要去哪里
今天,我在为存储在映射中的case类实例中的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.
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中的错误,但没有显示任何错误。是这样吗?谢谢你提供的信息,也谢谢你制作了这张票!