Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
• Аналогично метод класса ассоциирован с тем классом, в котором определен; он не принадлежит никакому конкретному объекту и не может вызываться от имени объекта. При вызове метода класса указывается имя класса, а при вызове метода экземпляра - имя объекта.
• В публикациях, посвященных Ruby, часто для обозначения метода экземпляра применяют решеточную нотацию. Например, мы пишем
File.chmod
chmod
File
File#chmod
• В Ruby константы не являются истинно неизменными. Их нельзя изменять в теле методов экземпляра, но из других мест это вполне возможно.
• Ключевое слово
yield
yield
• Составные операторы присваивания
+=
-=
x += y
x = x + y
+
+=
• Из-за того, как определены составные операторы присваивания, их нельзя использовать для инициализации переменных. Если первое обращение к переменной
x
x += 1
• Такое поведение можно в некотором смысле обойти. Можно определить операторы для объекта
nil
nil
nil.+
string
Fixnum
other
nil + other
other
def nil.+(other)
other
end
Мы привели этот код для иллюстрации возможностей Ruby, но стоит ли поступать так на практике, оставляем на усмотрение читателя.
• Уместно будет напомнить, что
Class
Object
• Некоторые операторы нельзя перегружать, потому что они встроены в сам язык, а не реализованы в виде методов. К таковым относятся
=
..
...
and
or
not
&&
||
!
!=
!~
+=
-=
• Имейте в виду, что хотя оператор присваивания перегружать нельзя, тем не менее возможно написать метод экземпляра с именем
fоо=
x.foo = 5
• Напомним: «голый» оператор разрешения области видимости подразумевает наличие
Object
::Foo
Objеct::Foo
• Как уже говорилось,
fail
raise
• Напомним, что определения в Ruby исполняются. Вследствие динамической природы языка можно, например, определить два метода совершенно по-разному в зависимости от значения признака, проверяемого во время выполнения.
• Напомним, что конструкция
for (for x in а)
each
for
• Не забывайте, что метод, определенный на верхнем уровне, добавляется в модуль
Kernel
Object
• Методы установки (например,
fоо=
• Напомним, что ключевое слово
retry
• Ключевое слово
retry
• Метод объекта
initialize
• Когда итератор заканчивается левой фигурной скобкой (или словом
end
squares = [1,2,3,4,5].collect do |x| x**2 end.reverse
# squares теперь равно [25,16,9,4,1]
• В конце программы на Ruby часто можно встретить идиому
if $0 == __FILE__
Таким образом проверяется, исполняется ли файл как автономный кусок кода (
true
false
• Обычное наследование (порождение подкласса) обозначается символом
<
class Dog < Animal
# ...
end
Однако для создания синглетного класса (анонимного класса, который расширяет единственный экземпляр) применяется символ
<<