Я только начал играть с JRuby. Это мой первый рубиновый пост. Мне было трудно понять классы и объекты в Ruby. Это не значит, что классы и объекты в других объектно-ориентированных языках. для примера
Class.is_a? Object
возвращает true и
Object.is_a? Object
слишком.
поэтому class и Object являются объектами
вот еще один
Class.is_a? Class
возвращает true и
Object.is_a? Class
слишком.
подождите, я еще не закончил
Object.instance_of? Class
Class.instance_of? Class
Оба являются истинными
Object.instance_of? Object
Class.instance_of? Object
Оба являются ложными. правильно, ничто не может быть экземпляром объекта.
И
Class.kind_of? Class
Object.kind_of? Class
оба истины
Class.kind_of? Object
Object.kind_of? Object
оба истины
Итак, оба они точно такие же, тогда почему у нас есть оба этих.?
После некоторого дополнительного копания я написал этот простой метод для возврата списка методов, поддерживаемого обоими
irb(main):054:0> def print_methods(obj)
irb(main):055:1> obj.methods.each do |mm|
irb(main):056:2* puts mm
irb(main):057:2> end
irb(main):058:1> end
Единственное различие методов между print_methods (Object) и print_methods (Class) -
Nesting
если Nesting означает наследование, Is Object похож на запечатанный класс?
Может кто-нибудь уточнить, что это такое?
Обновление: К комментарию Edds
Интересно, что я вижу много различий в списке методов в
c=Class.new
print_methods(c)
&
o=Object.new
print_methods(o)
Теперь я понимаю, что экземпляр класса действительно является экземпляром класса (и этот экземпляр класса фактически является объектом Object), а не экземпляром объекта. И даже этот экземпляр позволяет мне охватывать другие экземпляры
xx = c.new //works - c is an Object / and xx is a instance of an Object c
yy = o.new //nope - o is already a instance of an Object, so it cannot be instantiated again
Итак, объект Object действительно является экземпляром класса. Поскольку
xx.is_a? Class
false, но
xx.is_a? Object
возвращает true
Am я right,??