Smalltalk中等同于Java静态字段和方法的是什么?即,当Smalltalkers需要类级别的数据和/或方法时,他们会做什么?
Smalltalk中等同于Java静态字段和方法的是什么?即,当Smalltalkers需要类级别的数据和/或方法时,他们会做什么?
Rectangle origin: 0@0 corner: 100@100
创建一个矩形。这只是消息#origin:corner:发送给名为Rectangle的对象(类是一个对象!),并带有两个点作为参数。
类侧实例变量的工作方式基本相同。一个类,作为一个对象,可以拥有实例变量。从SUnit库中:
TestCase class
instanceVariableNames: 'history'
@
引起了很多讨论。它被称为二进制消息,允许定义看起来像其他语言中称为中缀运算符的选择器。例如,3 + 4
或0@0
。在@
的情况下,Number类定义了一个名为@
的方法,该方法接受一个参数y
,定义为^Point x:self y:y
- “返回一个点,其x坐标是我的值,y坐标是参数”。@
的方法,如下所示:^Triple x: self x y: self y z: z
- “返回R^3中的一个点,其x,y坐标是我的,z坐标是给定的参数”。@
符号是表示元组吗? - JimSmalltalk defineClass: #Car
superclass: #{Core.Object}
indexedType: #none
private: false
instanceVariableNames: 'colour '
classInstanceVariableNames: 'defaultColour'
imports: ''
category: ''
这是在VisualWorks Smalltalk中的一个类定义(实际上是对对象Smalltalk
的一条消息)。
如果您创建Car
的子类,它将继承类实例变量defaultColour
,就像普通对象一样。如果defaultColour
类实例变量有值,则子类也会继承这个值!