我正在尝试使用新的实例方法“square”来扩展 SmallInteger 类。我的想法是我希望能够调用“5 square”,它会返回 25。
使用实例方法扩展您自己的类相当简单,因为您知道变量名称,但我不知道 SmallInteger 类中的变量名称。我怎样才能找到他们?
我认为它应该看起来像这样,但“thisNumber”引用的是这个 SmallInteger 对象恰好是什么数字。
SmallInteger extend [
square [
| r |
r := thisNumber * thisNumber.
^r
]
]
我不是 GNU-Smalltalk 用户,但通常在 Smalltalk 中,方法的接收者由伪变量表示self
。因此你的方法应该看起来像
square
^self * self
将方法添加到实例侧SmallInteger
类,瞧。
但请注意,已经有一种方法可以做到这一点。它的选择器是squared
(with $d
作为它的最后一个字符。)所以,你真的不需要添加square
但这个例子可能会帮助你更多地理解 Smalltalk。
另外请注意,squared
没有定义在SmallInteger
但继承自Number
。原因是该消息在该层次结构的所有子类中都有意义,并且由于每个子类的实现都是相同的,因此只需在顶部有一个就足够了(某些方言在Fraction
为了性能。)
当然,self * self
可以返回一个非SmallInteger
but a LargePositiveInteger
。幸运的是,Smalltalk 中没有什么特别的,因此您可以对任何Number
并且它不会被截断为任何特定的位长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)