Подтвердить что ты не робот

Идиоматическое использование круглых скобок в Ruby

array.include? 'foo' or array.include? 'bar'

- синтаксическая ошибка (неожиданное ключевое слово_or). Круглые скобки решают проблему, но поскольку я новичок в Ruby, я не знаю, какое из следующего считается более идиоматичным:

Вариант 1

array.include?('foo') or array.include?('bar')

Вариант 2

(array.include? 'foo') or (array.include? 'bar')

Это относится к личным предпочтениям или один подход считается более "правильным"?

4b9b3361

Ответ 1

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

Отключить круглые скобки вокруг параметров для методов, которые являются частью внутреннего DSL (например, Rake, Rails, RSpec), методы, которые имеют статус ключевого слова в Ruby (например, attr_reader, puts) и методы доступа к атрибутам. Используйте круглые скобки вокруг аргументов всех других вызовов метода. - выдержка из руководства

class Person
  attr_reader :name, :age

  # omitted
end

temperance = Person.new('Temperance', 30)
temperance.name

puts temperance.age

x = Math.sin(y)
array.delete(e)

Ответ 2

Вы уверены, что это не удается? Ваш первоначальный пример отлично подходит для меня.

ruby-1.9.2-p290 :002 > array = ['bar']
 => ["bar"] 
ruby-1.9.2-p290 :003 > array.include? 'foo' or array.include? 'bar'
 => true

На самом деле, если что-то можно считать идиоматическим, это будет один. Низкий приоритет or позволяет работать, когда вы покидаете parens. Эта характеристика - это то, что должно сделать ее идиоматичной для Ruby (и даже Perl, от которой or является удержанием).

Вариант 1 очень понятен, но учитывая, что вы включили парнеры, вам действительно не нужно использовать or. Вероятно, лучше использовать ||, который имеет высокий приоритет, как и другие операторы, и является более распространенным явлением. Я думаю, что использование or для этого похоже на английский, не является большой практикой. Он имеет семантический смысл в языке и, вероятно, лучше всего используется для этих качеств.

Вариант 2 - глупо, конечно. Если вы собираетесь включить parens, вы можете также использовать их для подписи метода.

Надеюсь, что это поможет.

Ответ 3

Вариант 1 является предпочтительным, поскольку он является общим для других языков. Вариант 2 выглядит как LISP, который сегодня не пользуется популярностью.