Java的静态字段和方法的Smalltalk等效项是什么? IOW,当Smalltalkers需要类级别的数据和/或方法时,他们会做什么?
最佳答案
我们使用类方方法/实例变量。毕竟,类是一个对象,因此可以有方法。
例如,Rectangle类具有#origin:corner:方法,因此您可以编写
Rectangle origin: 0@0 corner: 100@100
创建一个矩形。这只是消息#origin:corner :,以两个点作为参数发送到名为Rectangle的对象(一个类就是一个对象!)。
类方实例变量的工作方式几乎相同。作为对象的类可能具有实例变量。从SUnit库中:
TestCase class
instanceVariableNames: 'history'
然后TestCase类以通常的方式使用getter/setter(#history和#history :)公开此内容。
编辑:我使用的
@
引起了相当多的讨论。这就是所谓的binary message,它使您可以定义选择器,这些选择器看起来就像其他语言称为中缀运算符。例如,3 + 4
或0@0
。对于@
,Number
类定义了一种称为@
的方法,该方法带有一个参数y
,定义为^Point x: self y: y
-“返回一个x坐标是我自己的值,而y坐标是参数的点”。Point是一对有序的对,但是当然,没有什么可以阻止一个对高维版本的定义。
Point
可能定义一个称为@
的方法,如下所示:^Triple x: self x y: self y z: z
-“返回R ^ 3中的x,y坐标是我自己的点,而z坐标是给定参数的点”。