我遇到以下语句:
(Metaclass class) new. "Uses the new of Behavior but throws error because Metaclass class is singleton"
Metaclass new. "Uses the new of Behavior"
我以为
Metaclass class
是Metaclass
,那么答案为何不同?我似乎无法弄清楚方法查找的工作方式。我需要遵循哪个层次树?在哪里可以找到具有基本类的几乎完整的树?
最佳答案
类/元类关系是Smalltalk中最复杂的主题之一,但它也是所有事物以一致的方式组合在一起的优雅方式的一部分。
方法查找从对象的类(该类描述对象)持有的MethodDictionary开始,并沿继承链向上进行。
通常,您不应该创建Metaclass的新实例,而应该让IDE /工具为您创建Metaclass,这是创建新类的副作用(将#'subclass:...'发送到现有的超类)。
您可以在Smalltalk映像中找到一棵基本类树。详细信息取决于方言,Squeak应该具有“类层次结构浏览器”,使您可以查看事物。
以下是有助于我形象化关系的图片。