Smalltalk相当于Java的静态是什么?

Jim*_*Jim 10 java oop programming-languages smalltalk

Smalltalk相当于Java的静态字段和方法是什么?IOW,Smalltalkers在需要类级数据和/或方法时会做些什么?

Fra*_*rar 10

我们使用类方法/实例变量.毕竟,类是一个对象,所以可以有方法.

例如,Rectangle类有一个方法#origin:corner:所以你可以写

Rectangle origin: 0@0 corner: 100@100
Run Code Online (Sandbox Code Playgroud)

创建一个Rectangle.这只是消息#origin:corner:发送到名为Rectangle的对象(一个类是一个对象!),其中两个Point作为参数.

类侧实例变量的工作方式大致相同.作为对象的类可以具有实例变量.来自SUnit库:

TestCase class
  instanceVariableNames: 'history'
Run Code Online (Sandbox Code Playgroud)

然后TestCase类以通常的方式使用getter/setter(#history和#history :)公开它.

编辑:@我使用过引起了一些讨论.这就是所谓的二进制消息,它允许人们定义看起来只是其他语言称为中缀运算符的选择器.例如3 + 4,或0@0.在这种情况下@,Number类定义了一个名为@take a parameter 的方法y,定义为^Point x: self y: y- "返回一个Point,其x坐标是我自己的值,其y坐标是参数".

Point是一个有序的对,但当然没有什么可以阻止定义更高维度的版本.Point可能会定义一个@看起来像这样的方法,例如:^Triple x: self x y: self y z: z- "返回R ^ 3中的一个点,其x,y坐标是我自己的,其z坐标是给定的参数".