Spec-Zone.ru › Ruby 2.7

Разное синтаксическое оформление

Завершение выражения

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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API