在 Pharo 中执行此代码会导致
Cannot store into ->
错误消息?
[ :x |
x := x + 33.
x + 2] value: 5
这是 Smalltalk 语法的逻辑结果,还是 Smalltalk 语义及其执行的结果?
变量 x 是块的参数。您所看到的是一种安全措施,以避免程序对程序员造成意外行为。它取决于方言(有些禁止分配给参数,其他警告,其他不执行任何操作)。
对参数进行赋值被视为代码异味,这就是它被禁止的原因。
从虚拟机/编译器的角度来看,支持参数赋值并不难,你的代码完全有效,实际上需要一些额外的编码工作来禁止它。