扩展默认类(SmallInteger)

时间:2016-05-04 10:54:03

标签: smalltalk gnu-smalltalk

我尝试使用新的实例方法扩展SmallInteger类" square"。这个想法是我想能够打电话给" 5平方"并且它将返回25。

使用实例方法扩展自己的类非常简单,因为您知道变量名,但我不知道SmallInteger类中的变量名。我怎样才能找到它们?

我认为它看起来应该是这样的,但是' thisNumber'正在引用此SmallInteger对象的任何数字。

SmallInteger extend [
    square [
        | r |
        r := thisNumber * thisNumber.
        ^r
    ]
]

1 个答案:

答案 0 :(得分:7)

我不是GNU-Smalltalk用户,但通常在Smalltalk中,方法的接收者由伪变量self表示。因此,您的方法应该看起来像

square
  ^self * self

将方法添加到SmallInteger类的实例端并发表文件。

但请注意,已有一种方法可以做到这一点。它的选择器为squared(最后一个字符为$d。)因此,您实际上不需要添加square,但该示例可能会帮助您更多地了解Smalltalk。

另请注意,squared中未定义SmallInteger,但Number继承了Fraction。原因是该消息在该层次结构的所有子类中都有意义,因为在每个子类中,实现都是相同的,只有一个在顶部(一些方言在self * self中优化方法)表现。)

当然,SmallInteger可以返回非LargePositiveIntegerNumber。幸运的是,在Smalltalk中没有什么特别的,所以你可以对任何terms进行平方,它不会被截断到任何特定的位长。