Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Типы переменных в Ruby

#ruby


Чем в Ruby отличаются переменная экземпляра класса и переменная объекта?
    


Ответы

Ответ 1



Во первых, объект - это экземпляр класса. Это одно и то же понятие. Еще можно часто встретить слово "инстанс", тоже означающее "экземпляр класса". Во вторых, кроме инстанс-, и класс-переменных, есть ещё одна интересная вещь - класс-инстанс переменная (или инстанс-переменная уровня класса). Они похожи на классовые переменные. Но если классовые переменные расшаривают значение и для классов, унаследованных от текущего, то класс-инстанс переменные - только для конкретного класса, и не наследуются. (они являются предпочтительным решением, если нет нужды в расшаривании переменной с наследниками). Фишка в том, что в руби, любой объявленный класс является экземпляром класса Class. И у этих самых объектов класса Class тоже могут быть свои инстанс-методы (уровня класса). Ну и к слову: любой объект в руби (в том числе класс), является экземпляром класса Object. Отсюда выражение "класс - это объект, а объект - это класс".

Ответ 2



Каждый класс является инстансом типа Class и каждый класс является подклассом типа Object (в 1.8 - in 1.9 каждый класс является подклассом BasicObject'a). Таким образом, каждый класс является объектом в том смысле, что он является экземпляром подкласса Object, т.е. класса. Другими словами, нету отличий между перменной класса и объекта.

Ответ 3



Значение переменной экземпляра доступно только внутри экземпляра, к которому она принадлежит.

Ответ 4



ничем не отличается, так как объект это экземпляр класса

Ответ 5



Свои 5 копеек.. ) Насколько я понял речь идет о экземпляре класса и объекте класса. Объект класса(читай класс) - это своего рода "каркас" по которому строятся экземпляры класса.. К примеру переменные объекта класса являются общими для всех экземпляров класса.. class SomeClass #SomeClass - это объект класса(собственно каркас) @@class_var = -10 # это переменная объекта класса(или просто класса) она имеет #одно значение для всех экземпляров класса и все могут изменить ее def initialize(x,y) @x,@y = x,y #это переменные экземпляра класса они у каждого экземпляра свои # и имееют свои значения для каждого экземпляра end end some_obj = SomeClass.new(-1,-1) #some_obj это экземпляр класса его @x, @y = -1,-1 а его @@class_var = -10 some_obj_next = SomeClass.new(-2,-2) #some_obj_next это экземпляр класса его @x, @y = -2,-2 а его @@class_var = -10(ибо это общая переменная объекта класcа для всех )

Комментариев нет:

Отправить комментарий