微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Smalltalk是否在块中支持局部变量?如果没有,为什么?

如何解决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 举报,一经查实,本站将立刻删除。