Давайте теперь создадим приветствующий объект и используем его:
Как только объект g
создан, он запоминает, что имя – Pat. Хмм, а что
если мы попробуем получить имя напрямую?
Неа, не можем этого сделать.
Внутренности объекта
Переменные объекта скрыты внутри объекта. Они не супер скрыты, вы можете увидеть их, когда вы просматриваете объект и есть несколько других способов доступа к ним, но Ruby использует хороший объектно-ориентированный подход – держать данные такого типа скрытыми.
Итак, какие методы существуют для объектов класса Greeter?
Ого! Это куча методов. А мы объявили всего два. Что здесь происходит?
Ну, это все методы для объектов класса Greeter, полный список,
включая те, которые определены родительскими классами. Если мы хотим
список тех методов, которые мы определили в классе Greeter, мы можем
сказать не включать методы родительских классов, посредством передачи
параметра false
, означающего как раз это.
Ага, это больше похоже на то, что нам нужно. Итак, давайте посмотрим на какие методы наш объект может отвечать:
Как мы видим, он знает say_hi
и to_s
(метод, служащий для
превращения чего-либо в строку. Определен для всех объектов
по-умолчанию), но он не знает name
.
Изменяем классы – никогда не поздно
Но что если вы хотите иметь возможность получить или изменить имя? Ruby предоставляет простой способ для получения доступа к переменным объекта.
В Ruby вы можете открыть класс снова и изменить его. Изменения будут
актуальны для всех новых объектов, которые вы создаете, и даже доступны
для существующих объектов класса. Итак, давайте создадим новый объект и
поиграем с его свойством @name
.
Использование attr_accessor
определяет два новых метода для нас:
name
, чтобы получать значение переменной @name
и name=
, чтобы это
значение назначать.
Приветствовать всех и вся, MegaGreeter никого не забудет!
Этот приветствующий не особо интересен, он может иметь дело только с одним человеком. Что если мы хотим некий класс MegaGreeter, который может приветствовать и весь мир, и одного человека, и целый список людей?
Давайте запишем его в файл, вместо того чтоб писать построчно в IRB.
Чтобы выйти из IRB, наберите quit
, exit
или просто нажмите
Control-D.
Сохраните этот файл как “ri20min.rb” и запустите его как “ruby ri20min.rb”. Результат должен быть следующим:
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come
back soon!
...
...
Здесь куча новых вещей в последнем примере, на которые мы взглянем подробнее.