2013-02-12 2 views
0

мой вопрос может быть очень простым, но я не понимаю, почему выход такой.модель объекта ruby ​​+ создание класса на основе другого класса

MyClass = Class.new String 
MyClass.ancestors 
=> [MyClass, String, ..] 

AnotherClass = Class.new MyClass 
=> AnotherClass 
AnotherClass.ancestors 
=> [AnotherClass, MyClass, String, ..] 

в приведенном выше коде, я создаю новый экземпляр класса с именем MyClass и передает объект (все в рубин объект) «Строка» в качестве параметра. Почему «String» встречается в списке предков MyClass. Я не унаследовал MyClass от String, но это то, что, похоже, делает Ruby. Он работает как конструктор копирования, но почему наследование?

ответ

3

Следующего

class A < B 
end 

фактически только синтаксис для

A = Class.new B 

См Random Ruby Tricks: Class.new и official docs для получения дополнительной информации.

+0

спасибо. теперь я понимаю, почему Object является суперклассом по умолчанию. Я думал, что это может быть установка внутреннего указателя в коде cpp, но это установлено в Class.new. еще раз спасибо. –

1

Я не унаследовал MyClass от String

Да у вас есть. Вот что the argument to Class::new означает:

new(super_class=Object)a_class

Создает новый анонимный (безымянный) класс с заданным суперклассом (или Object, если параметр не задан).

Смежные вопросы