Eon*_*nil 6 closures smalltalk block
我听说Smalltalk不支持块中的局部变量.这是真的?如果是,为什么Smalltalk不支持局部变量?我还能认为它与封闭相同吗?
Nor*_*rtl 12
这取决于您选择的smalltalk平台.基本上你在所有smalltalk平台上都有阻塞局部变量.有恕我直言两种实现.如果没有完全闭包支持,则局部变量将与该块周围方法的局部变量共享.为此,您需要知道如何解决一些问题.对于完全闭包支持,局部变量就在那里并且可以正常工作.
Squeak和Pharo曾经拥有与该方法共享的本地人.现在有一个完全关闭支持的虚拟机,Pharo完全支持这个,我认为Squeak也是如此.我认为宝石没有全封闭支持.我不知道VaST和VisualWorks.
您可以通过执行以下操作来测试它:
((1 to: 5) collect: [:i|
[ | local | local := i ]])
collect: [:each| each value]
Run Code Online (Sandbox Code Playgroud)
在这里你只能得到
#(1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)
如果有完全关闭支持和
#(5 5 5 5 5)
Run Code Online (Sandbox Code Playgroud)
如果| 当地的| 与方法共享.