gpt4 book ai didi

scala - 某些使用 Dynamic 的代码无法在 block 内运行

转载 作者:行者123 更新时间:2023-12-03 12:10:33 25 4
gpt4 key购买 nike

下面是一些使用 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

但是当你在某些 block 中使用它时,它无法工作。

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

这是一个错误吗?或者我只是缺少什么?

最佳答案

这是一个 regression2.10 的早期版本中,2.10.1-RC1 之前.我能够在 2.10.0 中重现该问题,然后使用 2.10.1 运行相同的代码,并且没有错误。

关于scala - 某些使用 Dynamic 的代码无法在 block 内运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com