Looking for ruby Keywords? Try Ask4Keywords

Ruby Language Управляющий поток с логическими инструкциями


пример

Хотя это может показаться нелогичным, вы можете использовать логические операторы для определения того, выполняется ли оператор. Например:

File.exist?(filename) or STDERR.puts "#{filename} does not exist!"

Это проверит, существует ли файл, и только распечатывает сообщение об ошибке, если это не так. Оператор or является ленивым, что означает, что он перестанет выполняться, если он уверен, что значение true или false. Как только первый термин окажется истинным, нет необходимости проверять значение другого термина. Но если первый член является ложным, он должен проверить второй член.

Обычно используется значение по умолчанию:

glass = glass or 'full' # Optimist! 

Это устанавливает значение «full» для glass если оно еще не установлено. Более кратко, вы можете использовать символическую версию or :

glass ||= 'empty' # Pessimist. 

Также можно запустить второй оператор только в том случае, если первый из них является ложным:

File.exist?(filename) and puts "#{filename} found!"

Опять же, and ленив, поэтому он будет выполнять только второй оператор, если необходимо, чтобы получить значение.

Оператор or имеет более низкий приоритет, чем and . Аналогично, || имеет более низкий приоритет, чем && . Формы символов имеют более высокий приоритет, чем словоформы. Это удобно знать, когда вы хотите смешать эту технику с назначением:

a = 1 and b = 2
#=> a==1
#=> b==2
a = 1 && b = 2; puts a, b
#=> a==2
#=> b==2

Обратите внимание, что руководство по стилю Ruby рекомендует :

Запрещены and и / or ключевые слова. Минимальная добавленная читаемость просто не стоит высокой вероятности введения тонких ошибок. Для булевых выражений всегда используйте && и || вместо. Для управления потоком используйте, if и unless ; && и || также приемлемы, но менее ясны.