Какой вариант использования для информации, предоставляемой методом класса, в таких случаях? Что это действительно говорит мне, чтобы иметь практическое применение? Кажется, это не имеет ничего общего с наследованием.
class
работает одинаково для каждого объекта. Вызов class
для класса предоставляет ту же информацию, что и вызов class
для экземпляра. Это потому, что в Ruby классы тоже являются экземплярами.
'foo'.class
возвращает String
, поскольку 'foo'
является экземпляром String
. Аналогично, User.class
возвращает Class
, поскольку User
является экземпляром Class
.
В частности, User
является , а не экземпляром ApplicationRecord
.
Может быть неочевидно, что User
является экземпляром Class
при его создании с помощью ключевого слова class
:
class User < ApplicationRecord; end
Но это становится очень очевидным, когда вы создаете его явно с помощью Class.new
: (оба примера дают один и тот же результат)
User = Class.new(ApplicationRecord)
User.class #=> Class
Поскольку вышеприведенное выглядит так: (используя String.new
в демонстрационных целях)
foo = String.new('foo')
foo.class #=> String