- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
这可能根本不是悖论,但从新手的角度来看,确实如此。
> Class.superclass
=> Module
> Class.superclass.class
=> Class
> Class.superclass.class.superclass
=> Module
所以一个类的父类是模块,但模块是一个类?
我怎样才能理解这一点?
最佳答案
TL;DR:模块是 类的父类(super class)。模块是 类的一个实例。
Ruby 中的每个类都有 1 个父类(super class)*。
* BasicObject 除外,它没有父类(super class)。
像这样阅读上图:Float 的父类(super class)是 Numeric。 Numeric的父类(super class)是Object等...
当您实例化一个对象时,该对象将是某个类的实例。例如,“Nathan”是 String 类的一个实例。 “乔”或“约翰”也是如此。 1 是 Fixnum 类的实例,2、3、4 等也是...
像这样阅读上图:“Joe”是 String 的一个实例。 1 是 Fixnum 等的一个实例...
好吧,在 Ruby 中,与大多数其他语言不同,Class 只是另一个类,它也可以被实例化,就像 Fixnum 或 String 一样。
像这样阅读上图:0.01 是 Float 的一个实例。 String 是 Class 的实例等...
意识到 Fixnum 是 Class 的实例,就像“Nathan”是 String 的实例一样。就像“John”是 String 的实例一样,Float 只是 Class 的实例。每个类都只是 Class 的一个实例,甚至是 Class 本身!
每当您在应用程序中编写一个新类时,您只是在实例化一个类为 Class 的新对象,就像 Hash.new 实例化一个新的 Hash,或者“Nathan”实例化一个新的 String。
# By running this, you will be instantiating a new Class, and
# it will be named Post
class Post < ActiveRecord::Base
end
# Here is another perfectly valid way to write the above code:
Post = Class.new(ActiveRecord::Base)
# you can even instantiate a Class without giving it an explicit name:
x = Class.new(ActiveRecord::Base)
# and since your new things are classes, they can be instantiated
obj1 = Post.new
obj2 = x.new
此外,Module 只是 Class 的另一个实例。每当您在应用中编写新模块时,您只是在实例化一个新模块。
# this will instantiate a new Module, and assign it to Foo
module Foo
end
# Here is another perfectly valid way to write the above code:
Foo = Module.new
# you can even instantiate a Module without giving it an explicit name.
m = Module.new
旁白:模块只是方法和常量的集合。类也是方法和常量的集合,但具有能够被实例化的附加功能。无法实例化模块。也就是说,m.new
将不起作用。
所以,回到上面的图,你的问题可以直接回答:
So a class's parent is module, but module is a class?
从上图可以看出:Module是类的父类(super class)。
从底部图形开始:模块是 类的一个实例。
关于ruby - 有人可以解释 Class.superclass.class.superclass 悖论吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558504/
尝试构建我的 Polymer 2.0 项目,但每次我尝试时,无论预设(es5-bundled、es6-bundled)还是单独的标志,我都会收到以下针对我拥有的一个 mixin 的警告: EdmMac
早上好,这是从 oracle 教程中摘录的,假设我们有 class Shape { /* ... */ } class Circle extends Shape { /* ... */ } class
这可能根本不是悖论,但从新手的角度来看,确实如此。 > Class.superclass => Module > Class.superclass.class => Class > Class.sup
我一直在实例化javascript中的子类,使用 object = new class () 但我注意到有人实例化使用 object.prototype = new class () 问题:有什么区别
编辑:用一个简单的用例创建了一个 repo 来复制问题,并在 API 平台问题队列中创建了一个问题 https://github.com/api-platform/api-platform/issue
我正在试验 Java 泛型。我了解使用 Java 泛型我们可以创建仅处理特定类型的类和方法。这使得能够在编译时检测编程错误。 我的问题听起来很奇怪。为什么使用 E extends Superclass
我有一个项目,涉及创建不同类型的对象,这些对象从父类(super class)继承方法和变量,但是当我尝试更改子类中的变量(更改为通过构造函数输入的值)时,变量保持相同的值它在父类(super cla
当我在线部署一个包含映射父类(super class)实体的 symfony 网站时,我收到以下错误: AnnotationException: [Semantical Error] The anno
我有ForceGaugeViewController类和ForceGaugeController类。我试图使 ForceGaugeController 类成为 ForceGaugeViewContro
我想创建一个 Num 的父类(super class),称为 Linear class Linear a where add :: a -> a -> a instance (Num a) =>
我正在尝试从类中删除父类(super class)。 ODB手册说“NULL将删除它”。但它给了我这个错误: "java.lang.IllegalArgumentException: Supercla
我有一个实体数组列表。实体类有 public void update(int delta, Level level, ArrayList entities){ //do stuff } 实体
问题 大多数情况下,当我重新导入项目到eclipse的时候,我重写的方法都不能被正确格式化,导致这样的错误:> The method must override a superclass method
我正在制作一个解决许多类似问题的程序。 我从一个看起来像(例如)的类开始: class problem { void init(); void solve(); int print_res
我的一些构造函数有问题。两个子类都需要得到相同的类(没有父类(super class)),这就是为什么这些类应该在父类(super class)中初始化: template class Super
我正在使用增强的 for 循环,它看起来像这样: public void addItems (Iterable items) { for (Item item : items) {
我是第一次开发 MATLAB OOP 项目。我的父类将有一个非常大的矩阵, child (很多)需要访问它。如何防止 child 复制数据? 在伪代码中我要求, classdef parent
我正在使用 CommonsWare 的 Android CWAC-Camera 库并尝试将我自己的 UI 用于相机 fragment 。如果这是一个愚蠢的问题,请原谅我。我特别关注这部分的 READM
我正在使用具有以下简单本体的 Protege 4.3(也尝试过 5-beta): Class: Person Class: Man SubClassOf: Person Ind
我正在玩 Scala By Example 开头的 QuickSort 示例并尝试将其调整为通用类型 A ,而不仅仅是 Int s。 到目前为止我的工作是 def sort[A new Y(i, -
我是一名优秀的程序员,十分优秀!