最接近枚举类型的 Smalltalk 功能是 SharedPool(又名PoolDictionary)。因此,如果您要将一些枚举从 Java 移植到 Smalltalk,您可能需要使用SharedPool。这样做的方法如下:
对于您类型中的每个枚举,您将在池中定义一个关联,key 是类型名称,value 是类型值。
在某些方言中PoolDictionaries 是字典,在Pharo 中它们是SharedPool 的子类。因此,在 Pharo 中,您将所有类型名称声明为类变量。然后在初始化方法(类端)中将值与键相关联。
例如,您可以使用类变量'Red', 'Green', 'Blue', 'Black', 'White' 等定义名为ColorConstants 的SharedPool 的子类,如下所示:
SharedPool
subclass: #ColorConstants
instanceVariableNames: ''
classVariableNames: 'Red Green Blue Black White'
poolDictionaries: ''
package: 'MyPackage'
要将名称与值关联,请在以下行中添加类端初始化方法:
ColorConstants class >> initialize
Red := Color r: 1 g: 0 b: 0.
Green := Color r: 0 g: 1 b: 0.
Blue := Color r: 0 g: 0 b: 1.
Black := Color r: 0 g: 0 b: 0.
White := Color r: 1 g: 1 b: 1.
"and so on..."
一旦你评估了ColorConstants initialize,你就可以在你的课堂上使用这个池
Object
subclass: #MyClass
instanceVariableNames: 'blah'
classVariableNames: ''
poolDictionaries: 'ColorConstants'
package: 'MyPackage'
在MyClass(及其子类)中,您可以按名称引用颜色:
MyClass >> displayError: aString
self display: aString foreground: Red background: White
MyClass >> displayOk: aString
self display: aString foreground: Green background: Black