gpt4 book ai didi

smalltalk - Smalltalk的whileTrue消息在幕后是如何实现的?

转载 作者:行者123 更新时间:2023-12-03 06:55:29 24 4
gpt4 key购买 nike

我正在尝试自学 Smalltalk。 A tutorial有一个 while 循环的示例:

|i| 
i:=5.
[i >0] whileTrue:[
Transcript show: ((i*2) asString) ; cr.
i:=i-1.
].

据我了解,whileTrue 是发送到 BlockClosure 的消息,告诉接收方 BlockClosure 只要接收者为 true,就运行作为参数给出的 BlockClosure。

在 Smalltalk 中,BlockClosure 响应的 whileTrue 消息在没有 while 循环构造的情况下是如何实现的?或者它是以运行时编写的任何语言实现的?

最佳答案

在我的 VisualWorks 图像中,它是通过递归完成的:

whileTrue: aBlock   ^self value      ifTrue:      [aBlock value.      [self value] whileTrue: [aBlock value]]

但是,还有一个注释,如果接收者和参数都是文字 block ,则编译器将内联 #whileTrue: 调用。因此,在大多数情况下,您还可以考虑#whileTrue:“神奇”消息之一,在语法上看起来像消息发送,但实际上在幕后优化为不同的字节码。

关于smalltalk - Smalltalk的whileTrue消息在幕后是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485451/

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