Ruby/Методика самопознания: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Что такое самопознание?: 'поднаготную' заменено на 'подноготную'
→‎Какому классу принадлежит объект?: незначительные исправления
Строка 18:
 
=== Какому классу принадлежит объект? ===
Язык программирования Ruby является ''строго типизированным'' (как и большинство других языков), то есть никогда не существует неопределенностинеопределённости по поводу класса того или иного объекта. Долгое время Ruby считали не строго типизированным языком, но это заблуждение, которое возникло из динамической структуры языка: класс переменныхпеременной определяется объектом, на который ссылается эта переменная и вместе со сменой объекта может поменяться и класс переменной.{{Info|Авторы дают неверную интерпретацию понятия "строго типизированный"}}
 
Исходя из вышеизложенного, существуетмы необходимостьможем оказаться в ситуации, когда необходимо узнать, какой класс хранится в той или иной переменной (или возвращается каким либо методом). Для этой цели служит метод <tt>.class</tt> ("неожиданно", правда?), который возвращает класс, которому принадлежит данный объект.
 
<source lang=ruby>"типичная строка".class #-> String
Строка 28:
Fixnum.class #-> Class</source>
 
Обратите внимание, что метод <tt>.class</tt> возвращает объект класса Class (еще однаочередная неожиданность). А почему же не строка? Дело в том, что от класса можно сразу же вызывать методы этого класса. Например, Вам нужно создать объект точно такого же класса, как и у переменной my_variable. Тогда Вашваш код может выглядеть следующим образом:
 
<source lang=ruby>my_variable = [1, 2, 3, 4]
Строка 37:
Думаю, что никому не надо объяснять, какую мощь дает подобный механизм. Например, в своей деятельности мне не раз приходилось создавать массив классов, от каждого из которых вызывались одни и те же методы.
 
{{info|У метода <tt>.class</tt> есть синоним <tt>.type</tt>, но последние версии интерпретатора выдают предупреждение, что метод <tt>.type</tt> устарел и в дальнешемдальнейшем исчезнет из языка}}
 
=== От какого класса унаследован этот класс? ===