3

这是一些使用Dynamic. 如您所见,下面的部分按预期工作。

scala> import language.dynamics
import language.dynamics                                                     

scala> class ExpandoObject extends Dynamic {
     |   private val dict = collection.mutable.Map.empty[String, Any]
     |   def selectDynamic(name: String): Any = dict(name)
     |   def updateDynamic(name: String)(arg: Any) = dict(name) = arg
     | }
defined class ExpandoObject

scala> val e = new ExpandoObject
e: ExpandoObject = ExpandoObject@14e03fec

scala> e.name = "rahul"
e.name: Any = rahul

scala> e.name
res62: Any = rahul

但是,当您在某个块中使用它时,它无法工作。

scala> {
     |   val e = new ExpandoObject
     |   e.name = "rahul"
     | }
<console>:20: error: reassignment to val
                e.name = "rahul"
                       ^

scala>

同样,如果您updateDynamic明确调用,它会起作用。

scala> {
     |   val e = new ExpandoObject
     |   e.updateDynamic("name")("rahul")
     |   e
     | }
res66: ExpandoObject = ExpandoObject@3f755bd2

scala> res66.name
res67: Any = rahul

这是一个错误吗?或者我只是想念什么?

4

1 回答 1

3

这是之前版本的回归。我能够在 中重现该问题,然后使用 运行相同的代码,并且它可以正常工作。2.102.10.1-RC12.10.02.10.1

于 2013-04-09T21:24:29.390 回答