Object — различия между версиями
Korvin (обсуждение | вклад) м |
Korvin (обсуждение | вклад) м |
||
Строка 65: | Строка 65: | ||
'''Примечание:''' В текущей версии виртуальной машины, данная опция не реализована. | '''Примечание:''' В текущей версии виртуальной машины, данная опция не реализована. | ||
+ | |||
+ | == frozen == | ||
+ | |||
+ | '''Возвращает''': <tt>'''null'''</tt> или <tt>'''true'''</tt> <br> | ||
+ | |||
+ | Проверяет, является ли текущий объект замороженным. | ||
+ | |||
+ | '''Примечание:''' В текущей версии виртуальной машины, данная опция не реализована. | ||
+ | |||
+ | == clone == | ||
+ | |||
+ | '''Возвращает''': копию текущего объекта <br> | ||
+ | |||
+ | Метод служит для создания копии текущего объекта, используя оператор <tt>=</tt>. Если объект (или его класс) располагает таким методом, будет создана пустая инстанция класса, которой будет присвоено значение текущего объекта. | ||
+ | |||
+ | '''Примечание:''' В случае с контейнерами копирование происходит только в том случае, если данный элемент обладает оператором <tt>=</tt>; в противном случае, в копии контейнера будет лежать тот же объект: | ||
+ | <source lang="kpp"> | ||
+ | var ary = new array; | ||
+ | ary.push(5); | ||
+ | ary.push(Stream.open(...)); | ||
+ | var copy = ary.clone; | ||
+ | </source> | ||
+ | |||
+ | В этом примере, переменная ''copy'' будет содержать копию оригинального массива ''ary''. Однако скопирован будет только нулевой элемент массива, то есть объект соответствующий константе 5. Инстанция потока будет передана "как есть". |
Версия 15:37, 11 апреля 2008
Класс Object является сердцем всей стандартной библиотеки и ее центральным классом. Все остальные классы, прямо или косвенно наследуются от Object, что позволяет реализовывать централизованное управление и сбор информации об объектах. Данный класс имеет набор методов которые реализуют механизм рефлексии, который заключается в том, что объекты могут динамически получать информацию о других объектах (включая самих себя). Например, объект A может узнать, какие методы имеет объект B, и на основании этой информации выполнять те или иные действия.
Класс Object вводит понятие инспектирования объектов, которое позволяет получать сведения о содержимом объектов в удобной для восприятия форме (это может быть особенно полезно при отладке и трассировке программ).
Родители: Object
Методы: class className instanceOf call invoke freeze frozen clone inspect equals
Статические методы: нет
class
Возвращает: Class
Метод возвращает инстанцию класса Class, соответствующую классу данного объекта. Например: <source lang="kpp"> var x = 1; //переменная типа int var c = x.class; //переменная типа Class puts(c.name); //выведет на экран строку "int" </source>
className
Возвращает: string
Эквивалент операции x.class.name, только работает быстрее (без создания промежуточного объекта)
instanceOf
instanceOf(имя_класса: string)
instanceOf(класс: Class)
Возвращает: null или true
Проверяет, является ли текущий объект инстанцией указанного класса.
call
call(имя_метода: string, ...)
Возвращает: динамическую паременную
Метод позволяет вызывать методы объектов динамически, по их имени. Приэтом, вызываемому методу передаются все последующие параметры (если таковые имеются). Естественно, никакой проверки типов фактических параметров не производится. Всю работу по приведению типов программист должен осуществлять сам. Пример: <source lang="kpp"> var ary = new array; ary.call(:push, 1, 2, 3); puts(ary.inspect); // [1, 2, 3] </source>
invoke
invoke(имя_метода: string, параметры: array)
Возвращает: динамическую паременную
Метод аналогичен по смыслу методу call, за исключением того что последующие параметры передаются в массиве. При вызове этот массив будет "развернут", как если бы все параметры были записаны через запятую: <source lang="kpp"> var ary = new array; ary.invoke(:push, [1, 2, 3]); puts(ary.inspect); // [1, 2, 3] </source>
freeze
Возвращает: текущий объект
Метод "замораживает" текущий объект, после чего он становится доступным только для чтения. Обратной операции не существует, так что разморозить однажды замороженный объект нельзя.
Примечание: В текущей версии виртуальной машины, данная опция не реализована.
frozen
Возвращает: null или true
Проверяет, является ли текущий объект замороженным.
Примечание: В текущей версии виртуальной машины, данная опция не реализована.
clone
Возвращает: копию текущего объекта
Метод служит для создания копии текущего объекта, используя оператор =. Если объект (или его класс) располагает таким методом, будет создана пустая инстанция класса, которой будет присвоено значение текущего объекта.
Примечание: В случае с контейнерами копирование происходит только в том случае, если данный элемент обладает оператором =; в противном случае, в копии контейнера будет лежать тот же объект: <source lang="kpp"> var ary = new array; ary.push(5); ary.push(Stream.open(...)); var copy = ary.clone; </source>
В этом примере, переменная copy будет содержать копию оригинального массива ary. Однако скопирован будет только нулевой элемент массива, то есть объект соответствующий константе 5. Инстанция потока будет передана "как есть".