Разное синтаксическое оформление
Окончание выражения
Ruby использует перевод строки в качестве окончания выражения. Если строка заканчивается оператором, открывающей скобкой, запятой и т. д., то выражение будет продолжено.
Вы можете завершить выражение с помощью ; (точка с запятой). Точки с запятой чаще всего используются с ruby -e.
Отступы
Ruby не требует отступов. Обычно программы на Ruby отступают на два пробела.
Если вы запустите ruby с включенными предупреждениями и у вас не совпадает отступ, вы получите предупреждение.
alias
Ключевое слово alias чаще всего используется для алиасинга методов. При алиасинге метода вы можете использовать его имя или символ:
alias new_name old_name alias :new_name :old_name
Для методов часто можно использовать Module#alias_method вместо alias.
Вы также можете использовать alias для алиасинга глобальных переменных:
$old = 0 alias $new $old p $new # prints 0
Вы можете использовать alias в любом контексте.
undef
Ключевое слово undef предотвращает текущий класс от ответа на вызовы именованных методов.
undef my_method
Вы можете использовать символы вместо имён методов:
undef :my_method
Вы можете отменить несколько методов:
undef method1, method2
Вы можете использовать undef в любом контексте. См. также Module#undef_method
defined?
defined? — это ключевое слово, которое возвращает строку, описывающую его аргумент:
p defined?(UNDEFINED_CONSTANT) # prints nil p defined?(RUBY_VERSION) # prints "constant" p defined?(1 + 1) # prints "method"
Вы не обязаны использовать скобки с defined?, но их рекомендуется использовать из-за низкого приоритета defined?.
Например, если вы хотите проверить, существует ли переменная экземпляра и что она равна нулю:
defined? @instance_variable && @instance_variable.zero?
Это возвращает "expression", что не то, что вам нужно, если переменная экземпляра не определена.
@instance_variable = 1 defined?(@instance_variable) && @instance_variable.zero?
Добавление скобок при проверке, определена ли переменная экземпляра, является лучшей проверкой. Это правильно возвращает nil, когда переменная экземпляра не определена, и false, когда переменная экземпляра не равна нулю.
Использование специфических методов рефлексии, таких как instance_variable_defined? для переменных экземпляра или const_defined? для констант, менее подвержено ошибкам, чем использование defined?.
BEGIN и END
BEGIN определяет блок, который выполняется перед любым другим кодом в текущем файле. Обычно он используется в однострочных выражениях с ruby -e. Аналогично END определяет блок, который выполняется после любого другого кода.
BEGIN должен появляться на верхнем уровне, и END выведет предупреждение, когда вы используете его внутри метода.
Вот пример:
BEGIN {
count = 0
}
Вы должны использовать { и }, вы не можете использовать do и end.
Вот пример однострочной программы, которая складывает числа из стандартного ввода или любых файлов в списке аргументов:
ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.