如何在 Pharo 中获得 *all* 类?

How to get *all* classes in Pharo?

难题...尝试了 Smalltalk allClassesTBehaviour 中的 Kernel-Traits,但似乎不在列表中。有趣的是,它是 Trait 而不是 Class...?好像有对应的allTraitsallBehaviors.

在尝试获取所有内容时,我们还应该了解其他哪些信息?还是有其他方法可以获取所有内容?

你需要执行:

Smalltalk allClassesAndTraits.

注意:我以为在一些 Pharo 书中描述了反射,但我在任何书中都没有看到,所以无法指导您进一步阅读。

类 是对象

您始终可以对 Pharo 对象使用反射,这可能会让您更深入地了解您实际要查找的内容。

Any class 也是一个对象,一个 any 对象理解消息 allSubclasses(或 withAllSubclasses),它会给你...子classes。

Object willAllSubclasses

请注意,上面还会为您提供 "class-side" classes(它们是每个 class 的元 class 实例),因为它们也是对象;所以

Smalltalk allClasses asSet =¹ (ProtoObject withAllSubclasses \ Class allSubclasses) asSet
"or"
Smalltalk allClasses asSet = (ProtoObject withAllSubclasses \ Metaclass allInstances) asSet

特质不是类

Trait 是 class,但 TBehavior 不是;相反,它是 Trait.

实例

所以你可以说

Trait allSubclasses. "an OrderedCollection()"
Trait allInstances. "{... TBehavior. TClass. ...}"

¹SMarkCompilerTargetClass 是一些特殊的雪花。