如何在Pharo获得*所有*课程?

时间:2017-01-16 15:41:04

标签: reflection smalltalk pharo

难题......在Smalltalk allClasses中尝试了TBehaviourKernel-Traits,其中似乎在列表中缺失了。有趣的是,它是Trait而不是Class ......?似乎有相应的allTraits allBehaviors

在尝试获取所有内容时,我们应该知道的任何其他内容?还是有其他方法可以获得所有东西吗?

2 个答案:

答案 0 :(得分:3)

你需要执行:

Smalltalk allClassesAndTraits.

答案 1 :(得分:2)

注意:我认为某些Pharo书中描述了这种反思,但我没有看到它,所以不能指导你进一步阅读。

类是对象

您可以随时在Pharo对象上使用反射,这可以让您更深入地了解您实际需要的内容。

任何类都是一个对象,任何对象都能理解消息allSubclasses(或withAllSubclasses),它将为您提供......子类。

Object willAllSubclasses

请注意,上面的内容还将为您提供“类侧”类(每个类的元类实例),因为它们也是对象;所以

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

特征不是类

Trait是一个类,但TBehavior不是;相反,它是Trait实例

所以你可以说

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

¹SMarkCompilerTargetClass是一些特殊的雪花。