为什么此代码会导致“无法存储到 ->”错误消息?

问题描述 投票:0回答:1

在 Pharo 中执行此代码会导致

Cannot store into ->
错误消息?

[ :x |
x := x + 33.
x + 2] value: 5 

这是 Smalltalk 语法的逻辑结果,还是 Smalltalk 语义及其执行的结果?

block smalltalk pharo
1个回答
0
投票

变量 x 是块的参数。您所看到的是一种安全措施,以避免程序对程序员造成意外行为。它取决于方言(有些禁止分配给参数,其他警告,其他不执行任何操作)。

对参数进行赋值被视为代码异味,这就是它被禁止的原因。

从虚拟机/编译器的角度来看,支持参数赋值并不难,你的代码完全有效,实际上需要一些额外的编码工作来禁止它。

© www.soinside.com 2019 - 2024. All rights reserved.