Pharo代码报‘Cannot store into ->’错误:是语法还是语义原因?
关于Pharo代码报错的原因解析
这段代码触发的Cannot store into ->错误,是由Smalltalk的语义与执行机制导致的,而非语法层面的必然结果。
具体分析:
- 语法层面无问题:这段代码的写法完全符合Smalltalk的语法规范,编译器在语法检查阶段不会报错。块定义的参数
:x、赋值表达式x := x + 33的语法都是合法的。 - 执行时的语义约束:Smalltalk规定块的参数是只读绑定——当通过
value: 5传递参数时,x会被绑定到传入的数值5,但不允许对这个参数变量进行重新赋值。这种限制是语言语义设计的一部分,属于运行时才会触发的错误。
修正示例:
如果要实现类似逻辑,需要在块内部声明一个可变的临时变量来存储修改后的值:
[ :x | | temp | temp := x + 33. temp + 2] value: 5
内容的提问来源于stack exchange,提问作者vfclists
相关产品推荐
相关产品推荐

