&&
имеет высокий приоритет (сильнее and
, сильнее =
).
foo = 3 and 5 # sets foo = 3
foo = 3 && 5 # sets foo = true
Это также сильнее, чем неоднозначный вызов функции.Ваш код анализируется как
if (collection.respond_to? :each && collection.respond_to? :to_ary)
if (collection.respond_to? (:each && collection.respond_to?) :to_ary)
, что не имеет никакого смысла.Хотя использование and
анализируется как таковое
if (collection.respond_to? :each and collection.respond_to? :to_ary)
if (collection.respond_to?(:each) and collection.respond_to?(:to_ary))
Я рекомендую использовать это (поскольку оно не основано на правилах приоритета оператора и использует наименьшие скобки, имеет самые короткиескобки-расстояния и использует and
, которые чаще встречаются в условиях if
, чем &&
):
if collection.respond_to?(:each) and collection.respond_to?(:to_ary)