Глядя на Ruby docs, я вижу, что методы экземпляра из класса Object
включены в модуль Kernel
.Как класс Ruby наследуется от класса Object
Но эта линия от an article:
Класс BasicObject является родительским классом для всех классов в Ruby. Поэтому его методы доступны для всех объектов, если они явно не переопределены. До Ruby 1.9 класс Object был корнем иерархии классов. Для этого служит новый класс BasicObject, а Object - подкласс BasicObject. BasicObject - очень простой класс, практически не имеющий собственных методов. Когда вы создаете класс в Ruby, вы расширяете Object, если вы явно не укажете суперкласс, и большинству программистов никогда не понадобится использовать или расширить BasicObject.
говорит, что делает класс является расширение класса Object
.
Мое знание extend
заключается в том, что оно преобразует методы экземпляра, которые модуль использует в методах, которые могут быть достигнуты так же, как методы класса.
Это подразумевает здесь, что оно технически расширяется Kernel
, а не включает, когда класс построен?
И как это работает, если это так?
Посмотрите на [этот пост] (http://stackoverflow.com/questions/8894817/whats-the-difference-between-object-and-basicobject-in-ruby) – prashu132
Спасибо Prashu. Хотя я не совсем понимаю связь с моим вопросом о том, как расширение Object работает с точки зрения модульного отношения (если это даже то, что происходит). Он просто говорит мне, что Object наследует от BasicObject, который (в основном) является чистым классом сланца. –
Если вы не наследуете свой класс из любого класса, он по умолчанию наследует класс Object, который, в свою очередь, наследует класс BasicObject. Если вы наследуете класс class (кроме BasicObject), ваш родительский класс наследует класс Object и, таким образом, вы все равно остаетесь в той же иерархии Ruby. BasicObject и его подклассы (а не через Object) предоставляют вам классы классов, чтобы держаться подальше от иерархии рубинов по умолчанию, чтобы сделать вещи простыми для простого использования. – prashu132