我学的Common Lisp(与Lispworks),我想进入一流的系统现在。 还有一类所谓的标准对象 ,并将其定义为
类标准目的是标准级的一个实例,并为每一个类,它是标准类的一个实例,除了本身的类的超类。
(取自http://www.lispworks.com/documentation/HyperSpec/Body/t_std_ob.htm#standard-object ),所以它是标准类的实例
在另一方面标准级是标准对象的子类
>(subtypep 'standard-class 'standard-object)
=>T, T
标准的对象如何能为标准级超类,并在同一时间将它的实例? 如果我们定义标准级的亚型,我们应该其父类型(例如,标准对象)的defenition 后定义它,所以它怎么能,超类成为实例? 还是我的逻辑是错误的?
CLOS是物体的系统,其中CLOS概念本身是第一类对象。 类本身的实例 - 元类的。 还有一些涉及圆。
有一个实例standard-object
。 它的一个实例, standard-class
。 这是一类本身。 所有标准CLOS对象将它作为一个超类。 还有其他类型的对象,例如结构。 因此, standard-object
是有作为所有典型的CLOS对象的超类。
standard-class
本身就是实例。 它是类的所有类的对象。 由于standard-object
也是类,该类的实例standard-object
是类的一个实例standard-class
。 由于所有的标准类也CLOS目的, standard-class
继承自standard-object
。
CL-USER 22 > (class-of (find-class 'standard-object))
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
类中的standard-object
类对象是standard-class
。
CL-USER 23 > (class-of (find-class 'standard-class))
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
类中的standard-class
类对象是standard-class
。
CL-USER 24 > (find-class 'standard-object)
#<STANDARD-CLASS STANDARD-OBJECT 40F017732B>
类standard-object
本身是一个对象和一个类。 这是所有CLOS对象的超类。
CL-USER 25 > (find-class 'standard-class)
#<STANDARD-CLASS STANDARD-CLASS 40F016A063>
类standard-class
本身是一个对象和一个类。 这是所有CLOS类的父类。
要理解这一点,你需要了解的概念meta class
。 元类的实例是类和类的实例是一个对象,所以基本上我们有3个层次结构。
standard-class
是元级。 standard-object
是元类的一个实例, standard-class
,因此它是类。 默认情况下每个其他用户定义的类继承自standard-object
类。
所以,当你创建一个类时,你基本上实例standard-class
元类和新类是由遗传standard-object
类。
我会尽量给一个答案,似乎是混乱的,你只有一个问题:
标准的对象如何能为标准级超类,并在同一时间将它的实例?
我希望你所熟悉的数学关系的概念。 正在对一组与操作定义的关系。 相关的例子包括“是整除”,“是”,“等于”等。所以,“是的实例”是一种关系,“是的子类”是一个关系了。 他们是绝不相同! 一个子类必须是一个类的实例可能是一类,但通常它是别的东西。 如果从本质举个例子:灵长类是哺乳动物的一个子类 - 这是“是的子类”的关系。 莱茜(从电影中的狗)是哺乳动物 - 这是“是的实例”关系的例子。
现在,很可能混淆你的是某种东西的功能,这是别的东西“的实例”是要的东西的类。 这,确实不会发生太大的性质,但这里的东西我能想到的:
语言和语法。 语法是一组规则,它定义了一种语言,语法,本身就是一种语言太(即它“的子类”的语言),而语言实例语法规则,所以语言“是的实例”语法。