Клас має модуль надкласового класу, який має об'єкт надкласового класу, який має базовий об'єкт надкласу, який є екземпляром класу. І Class знову підклас Модуль.
Я дуже збентежений щодо цього (вищевикладене було використано для використання методів .class та .superclass для кожного з вищезазначених об'єктів)
Хтось може мені пояснити, що саме тут відбувається?
Відповіді:
0 для відповіді № 1Словосполучення "екземпляр" - це невелика, але значна частина розумової гімнастики, яку вам тут потрібно робити.
Те, і об'єкти типу Class
, і клас під назвою Object
.
Якщо ви можете зрозуміти це, принаймні, повільно повторюючи себе, тоді ви це зрозуміли:
Object.new
створює екземпляр класу Об'єктObject
є посиланням на клас Об'єкт, який сам є об'єктом класу КласClass
є посиланням на клас Клас, який також є об’єктом класу Клас (!)Class.new
створює екземпляр класу Клас.- Це частина того, що відбувається під капотом, коли ви пишете
class Foo
- Насправді
Foo = Class.new( String )
майже те саме, що іclass Foo < String; end
- Це частина того, що відбувається під капотом, коли ви пишете
Ієрархія класів
Class
,Module
,Object
є деталлю реалізації в Ruby. Майже всі класи успадковують відObject
, тому це не є справжнім сюрпризомClass
робить це теж.
Решта - це просто багаторазове використання та досвід.
Варто зауважити, що тут відбувається ще щось: Мітки в коді, який ви вводите, є символами / іменами змінних покажчики до основних об'єктів, які мають типи та містять дані. Немає необхідності використовувати ці мітки безпосередньо, вони майже однакові з будь-якою іншою змінною Ruby:
o_klass = Object
o_instance = o_klass.new
o_instance.class
=> Object