【发布时间】:2022-01-14 17:29:53
【问题描述】:
我是 Smalltalk 的新手,所以我不知道我是否做错了,但这似乎很奇怪而且有问题。
dict := Dictionary new.
dict at: 1 put: 1.
dict at: 2 put: 2.
dict at: 3 put: 3.
dict at: 4 put: 4.
1 to: 4 do: [:j |
key := j.
value := dict at: key.
value print.
value printNl.
].
此代码工作正常并正确打印
11
22
33
44
但是,如果我向其他变量添加足够多的赋值,脚本的结果会发生变化:
dict := Dictionary new.
dict at: 1 put: 1.
dict at: 2 put: 2.
dict at: 3 put: 3.
dict at: 4 put: 4.
1 to: 4 do: [:j |
key := j.
value := dict at: key.
value print.
unrelated := 1.
unrelated2 := 1.
unrelated3 := 1.
unrelated4 := 1.
unrelated5 := 1.
unrelated6 := 1.
unrelated7 := 1.
unrelated8 := 1.
unrelated9 := 1.
unrelated10 := 1.
value printNl.
].
此代码现在打印
11
21
31
41
如果我删除分配unrelated10 的行,它会再次工作...我错过了什么还是 GNU Smalltalk 有问题?
我使用的是 GNU Smalltalk 3.2.5 版。
【问题讨论】:
-
unrelated变量是如何定义的?我的意思是,它们是 ivars、temporaries、shared 吗? -
正如我所说,我对 Smalltalk 还很陌生,所以我不清楚这意味着什么。在这两种情况下,我的代码都是我直接使用 gst 运行的完整脚本:
gst myfile.st。所以除了我贴的,没有多余的代码了。 -
我不是 GNU Smalltalk 用户,但你没有做错任何事。脚本中的最大临时数(自动定义?)一定有问题。