Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
attr_accessor :myvarПри этом создается метод
myvar@myvarmyvar=attr_readerattr_writeВнутри методов экземпляра, определенных в классе, можно при необходимости пользоваться переменной
selfДля управления видимостью методов класса можно пользоваться модификаторами
privateprotectedpublicfooclass MyClass def method1 # ... end def method2 # ... end def method3 # ... end private :method1 public :method2 protected :method3 private def my_method # ... end def another_method # ... endendВ этом классе метод
method1method2method3privatemy_methodanother_methodУровень доступа
publicprivateselfprotectedselfПо умолчанию все определенные в классе методы открыты. Исключение составляет лишь
initializeObjectКлассы в Ruby сами являются объектами — экземплярами метакласса
ClassКласс
ObjectKernelЧтобы создать класс, наследующий другому классу, нужно поступить следующим образом:
class MyClass < OtherClass # ...endПомимо использования встроенных методов, вполне естественно определить и собственные либо переопределить унаследованные. Если определяемый метод имеет то же имя, что и существующий, то старый метод замещается. Если новый метод должен обратиться к замещенному им «родительскому» методу (так бывает часто), можно воспользоваться ключевым словом
superПерегрузка операторов, строго говоря, не является неотъемлемой особенностью ООП, но этот механизм знаком программистам на C++ и некоторых других языках. Поскольку большинство операторов в Ruby так или иначе являются методами, то не должен вызывать удивления тот факт, что их можно переопределять или определять в пользовательских классах. Переопределять семантику оператора в существующем классе редко имеет смысл, зато в новых классах определение операторов — обычное дело.
Можно создавать синонимы методов. Для этого внутри определения класса предоставляется такой синтаксис:
alias newname oldnameЧисло параметров будет таким же, как для старого имени, и вызываться метод-синоним будет точно так же. Обратите внимание на отсутствие запятой;
aliasalias_method1.3.5. Методы и атрибуты
Как мы уже видели, методы обычно используются в сочетании с простыми экземплярами классов и переменными, причем вызывающий объект отделяется от имени метода точкой (
receiver.methodTime.mktime(2000, "Aug", 24, 16, 0)Поскольку каждое выражение возвращает значение, то вызовы методов могут сцепляться:
3.succ.to_s/(x.z).*?(x.z).*?/.match("x1z_1a3_x2z_1b3_").to_a[1..3]3+2.succОтметим, что могут возникать проблемы, если выражение, являющееся результатом сцепления, имеет тип, который не поддерживает конкретный метод. Точнее, при определенных условиях некоторые методы возвращают
nilnilНекоторым методам можно передавать блоки. Это верно для всех итераторов — как встроенных, так и определенных пользователем. Блок обычно заключается в операторные скобки
do-endFile.open
