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.但我想知道这种用法是如何接受的,或者你是否应该总是键入[和],即使你不关心参数是否被快速评估或多次评估.
这是 Pharo\xe2\x80\x99s 代码评论家对类似情况的评价:
\n\n\n\n\n特殊消息中的非阻塞:
\n\n检查在特殊消息中不使用块的方法。\n Smalltalk 的新手可能会编写如下代码:“aBoolean ifTrue:\n (self doSomething)”,而不是正确的版本:“aBoolean ifTrue:\n [自己做某事]”。即使这些代码片段可能是正确的,编译器也无法对其进行优化。
\n
这个规则可以在Optimization中找到,所以你可能会忽略它,但我认为无论如何使用块更好。
\n\n更新:
\n\nat:ifAbsent:不是由该规则触发的。而且它没有被编译器优化。因此,在这种情况下,优化并不是使用块的理由。