解释一下Smalltalk的一段代码?

2024-04-14

我无法理解这段 Smalltalk 代码:

[(line := self upTo: Character cr) size = 0] whileTrue.

有人可以帮忙解释一下吗?


如果您有代码来源的映像,可以做的一件简单的事情就是在其上运行调试器并单步执行。

如果您在上下文之外遇到了代码,例如邮件列表帖子,那么您可以浏览其中一条消息的实现者并查看它的作用。例如,#size 和 #whileTrue 是相当标准的,所以我们现在将跳过它们,但 #upTo: 听起来很有趣。它让我想起了流方法,并在其上调出实现者,这证实了(在 Pharo 1.1.1 中)ReadStream 定义了它。没有方法注释,但 OmniBrowser 在方法名称旁边显示一个小箭头,表明它是在超类中定义的。如果我们检查直接超类 PositionableStream,有一个很好的方法注释解释了该方法的作用,该方法从流中绘制,直到到达参数指定的对象。

现在,如果我们从逻辑上解析代码,似乎是这样的:

  • reads a line from the stream (i.e. up to a cr)
    • 如果为空(size = 0),则循环继续
    • 如果不是,则返回

因此,代码会跳过所有空行并返回第一个非空行。为了确认这一点,我们可以向它传递一个多行字符串流并像这样运行它:

line := nil.
paragraph := '


this is a line of text.
this is another line
line number three' readStream.
[(line := paragraph upTo: Character cr) size = 0] whileTrue.
line. "Returns 'this is a line of text.'"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释一下Smalltalk的一段代码? 的相关文章

随机推荐