gpt4 book ai didi

oop - 为什么要添加: return the object added in Smalltalk collections?

转载 作者:行者123 更新时间:2023-12-04 04:57:31 26 4
gpt4 key购买 nike

背景

吸引每个Smalltalk新手的是add:不会返回“self”,而是要添加的对象。

例如,使用以下代码:

myCollection := OrderedCollection new 
add: 'Peter';
add: 'John';
add: 'Paul'.
myCollection将包含字符串“Paul”,而不包含集合本身。

这是因为 add:返回要添加的对象,并且整个级联表达式求值为最后发送的消息。

相反,应在末尾用 yourself编写:
myCollection := OrderedCollection new 
add: 'Peter';
add: 'John';
add: 'Paul';
yourself.

问题
  • 为什么会这样?
  • 这样设计的是什么?
  • 以这种方式进行add:有什么好处?
  • 最佳答案

    我已经考虑了很多。我从未听说过Smalltalk的任何原始设计师会捍卫这一决定,所以我们不确定他们为什么这么做。我已经决定,原因是由于级联。如果add:返回了接收者,则(things add:Thing1)add:Thing2将与事物add:Thing1;相同。添加:thing2。通过使用add:返回参数,这两个表达式是不同的,程序员可以在适当的时候使用它们。

    但是,我认为这是一个错误。我教Smalltalk已有25年以上,每次教它时,人们都会对此感到烦恼。我总是警告他们,但是他们仍然会用add:犯错误。因此,我认为这是一个错误的设计决定。

    这个设计决定是关于库的,而不是编译器的。您可以通过进入收集类并对其进行更改来对其进行更改。当然,不可能预测将破坏多少Smalltalk程序。集合是如此基础,以至于很难像对语言进行真正的改变一样进行这种改变。

    关于oop - 为什么要添加: return the object added in Smalltalk collections?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047940/

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