oop – 为什么方法在Smalltalk中默认返回“self”?

背景

在Smalltalk中,如果您没有明确地返回任何内容,则消息传递将评估为接收者(或消息上下文中的“self”).

例如,给定此方法:

MyClass >> myMethod
  Transcript show: 'hello'; cr.

评估(doint“print-it”)这个:

| myInstance |
myInstance := MyClass new.
myInstance myMethod.

如果< print-it>完成到最后一次调用,然后结果将是实例本身.

问题

>为什么这样设计?
>它背后的想法是什么?
>哲学背景是什么?
>它有什么实际好处?方便链接是否方便?

一个非常简单的原因还没有说明:在虚拟机中,返回self比返回任何其他对象更简单,更有效.

Smalltalk字节代码实现堆栈机器.这意味着通过将参数推送到堆栈来传递参数,而不是将它们放入寄存器中.除了方法签名中列出的参数之外,还始终传递隐藏参数,该参数是消息的接收者.因此,即使对于一元方法(没有参数的方法),接收器被推入堆栈,然后执行该方法,并且堆栈上的接收器值是方法知道“自我”的方式.如果没有给出明确的return语句,则返回“self”,VM可以将“self”oop留在堆栈上,这样可以节省至少一个内存存储操作.因此,从效率和简单的角度来看,返回“自我”是最优雅的事情.

相关文章
相关标签/搜索