Spec-Zone.ru › Ruby 3.4

Различный синтаксис

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

Ruby использует перевод строки как признак окончания выражения. Если строка заканчивается оператором, открывающей скобкой, запятой и т. п., выражение продолжается.

Выражение можно завершить с помощью ; (точки с запятой). Точки с запятой чаще всего используются с ruby -e.

Отступы

Ruby не требует отступов. Обычно в программах на Ruby используются отступы в два пробела.

Если запустить Ruby с включёнными предупреждениями и допустить несоответствие отступов, вы получите предупреждение.

alias

Ключевое слово alias чаще всего используется для создания псевдонимов методов. При создании псевдонима метода можно использовать как его имя, так и символ:

alias new_name old_name
alias :new_name :old_name

Для методов вместо alias часто можно использовать Module#alias_method.

Вы также можете использовать 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?.

defined? особым образом обрабатывает некоторые глобальные переменные регулярных выражений в зависимости от наличия активного совпадения с регулярным выражением и количества групп захвата:

/b/ =~ 'a'
defined?($~) # => "global-variable"
defined?($&) # => nil
defined?($`) # => nil
defined?($') # => nil
defined?($+) # => nil
defined?($1) # => nil
defined?($2) # => nil

/./ =~ 'a'
defined?($~) # => "global-variable"
defined?($&) # => "global-variable"
defined?($`) # => "global-variable"
defined?($') # => "global-variable"
defined?($+) # => nil
defined?($1) # => nil
defined?($2) # => nil

/(.)/ =~ 'a'
defined?($~) # => "global-variable"
defined?($&) # => "global-variable"
defined?($`) # => "global-variable"
defined?($') # => "global-variable"
defined?($+) # => "global-variable"
defined?($1) # => "global-variable"
defined?($2) # => nil

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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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