gpt4 book ai didi

closures - Smalltalk 支持 block 中的局部变量吗?如果没有,为什么?

转载 作者:行者123 更新时间:2023-12-02 22:09:50 25 4
gpt4 key购买 nike

我听说Smalltalk不支持 block 中的局部变量。这是真的?如果是的话,为什么 Smalltalk 不支持局部变量?我仍然可以假设它与闭包相等吗?

最佳答案

这取决于您选择的smalltalk平台。基本上,所有 Smalltalk 平台上都有 block 局部变量。恕我直言,有两种实现。如果没有完整的闭包支持,则局部变量将与该 block 周围的方法的局部变量共享。为此,您需要知道如何解决一些问题。对于完全闭包支持,局部变量在那里并且按照您的预期工作。

Squeak 和 Pharo 曾经拥有与该方法共享的局部变量。如今,存在完全支持闭包的虚拟机,Pharo 完全支持这一点,我认为 Squeak 也支持。我认为 gem 没有完全关闭支持。我不了解 VaST 和 VisualWorks。

您始终可以通过执行以下操作来测试它:

((1 to: 5) collect: [:i| 
[ | local | local := i ]])
collect: [:each| each value]

在这里你只能得到

#(1 2 3 4 5)

如果有完全关闭支持并且

#(5 5 5 5 5)

如果 |本地 |与方法共享。

关于closures - Smalltalk 支持 block 中的局部变量吗?如果没有,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com