我尝试使用新的实例方法扩展SmallInteger类" square"。这个想法是我想能够打电话给" 5平方"并且它将返回25。
使用实例方法扩展自己的类非常简单,因为您知道变量名,但我不知道SmallInteger类中的变量名。我怎样才能找到它们?
我认为它看起来应该是这样的,但是' thisNumber'正在引用此SmallInteger对象的任何数字。
SmallInteger extend [
square [
| r |
r := thisNumber * thisNumber.
^r
]
]
答案 0 :(得分:7)
我不是GNU-Smalltalk用户,但通常在Smalltalk中,方法的接收者由伪变量self
表示。因此,您的方法应该看起来像
square
^self * self
将方法添加到SmallInteger
类的实例端并发表文件。
但请注意,已有一种方法可以做到这一点。它的选择器为squared
(最后一个字符为$d
。)因此,您实际上不需要添加square
,但该示例可能会帮助您更多地了解Smalltalk。
另请注意,squared
中未定义SmallInteger
,但Number
继承了Fraction
。原因是该消息在该层次结构的所有子类中都有意义,因为在每个子类中,实现都是相同的,只有一个在顶部(一些方言在self * self
中优化方法)表现。)
当然,SmallInteger
可以返回非LargePositiveInteger
但Number
。幸运的是,在Smalltalk中没有什么特别的,所以你可以对任何terms
进行平方,它不会被截断到任何特定的位长。