难题......在Smalltalk allClasses
中尝试了TBehaviour
和Kernel-Traits
,其中似乎在列表中缺失了。有趣的是,它是Trait
而不是Class
......?似乎有相应的allTraits
和 allBehaviors
。
在尝试获取所有内容时,我们应该知道的任何其他内容?还是有其他方法可以获得所有东西吗?
答案 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
是一些特殊的雪花。