是否可以将[和]保留为以下消息:ifAbsent:如果您不需要完整的块?

cla*_*dio 7 smalltalk visualworks squeak pharo gemstone

在Smalltalk(特别是Pharo/Squeak)中,我想知道是否可以省略"["和"]"作为消息的参数,如:ifAbsent:如果你不需要一个块,就像这样;

^ bookTitles at: bookID ifAbsent: ''.
Run Code Online (Sandbox Code Playgroud)

^ books at: bookID ifAbsent: nil.
Run Code Online (Sandbox Code Playgroud)

代码有效,因为(在Pharo/Squeak中)对象>>值只返回self.但我想知道这种用法是如何接受的,或者你是否应该总是键入[和],即使你不关心参数是否被快速评估或多次评估.

Mar*_*inW 2

这是 Pharo\xe2\x80\x99s 代码评论家对类似情况的评价:

\n\n
\n

特殊消息中的非阻塞:

\n\n

检查在特殊消息中不使用块的方法。\n Smalltalk 的新手可能会编写如下代码:“aBoolean ifTrue:\n (self doSomething)”,而不是正确的版本:“aBoolean ifTrue:\n [自己做某事]”。即使这些代码片段可能是正确的,编译器也无法对其进行优化。

\n
\n\n

这个规则可以在Optimization中找到,所以你可能会忽略它,但我认为无论如何使用块更好。

\n\n

更新:

\n\n

at:ifAbsent:不是由该规则触发的。而且它没有被编译器优化。因此,在这种情况下,优化并不是使用块的理由。

\n