如何解决Smalltalk是否在块中支持局部变量?如果没有,为什么?
| 我听说Smalltalk不支持块中的局部变量。这是真的?如果是,为什么Smalltalk不支持局部变量?而且我还能假设它与闭包相同吗?解决方法
这取决于您选择的smalltalk平台。基本上,您在所有smalltalk平台上都有块局部变量。有恕我直言两种实现。如果没有完全关闭支持,则将局部变量与该块周围方法的局部变量共享。为此,您需要知道如何解决一些问题。对于完全闭包支持,局部变量在那里并且可以按您期望的那样工作。
Squeak和Pharo曾经有与该方法共享的本地人。如今,已经存在具有完全关闭支持的VM,而Pharo完全支持此功能,我认为Squeak也支持。我认为宝石还没有完全封闭的支持。我不了解VaST和VisualWorks。
您始终可以通过执行以下操作来对其进行测试:
((1 to: 5) collect: [:i|
[ | local | local := i ]])
collect: [:each| each value]
在这里你只会得到
#(1 2 3 4 5)
是否有全面的关闭支持,以及
#(5 5 5 5 5)
如果|当地|与该方法共享。
, 您的意思是块局部变量,例如本例中的“ 3”:
10 timesRepeat:
[| today |
today := Date today.
Transcript cr; show: today printString]
, ??你是从哪里听来的?试试这个代码:
block := [
x := 10.
x printNl.
].
block value.
它应该输出10。
, 是的,VA Smalltalk支持它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。