array.include? 'foo' or array.include? 'bar'
是语法错误(意外的keyword_or)。圆括号解决了这个问题,但由于我是Ruby的新手,我不知道以下哪一个被认为更具惯用性:
array.include?('foo') or array.include?('bar')
(array.include? 'foo') or (array.include? 'bar')
这取决于个人偏好,还是一种方法被认为更“正确”?
答案 0 :(得分:24)
我建议您查看community-driven Ruby coding style guide,特别是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)
答案 1 :(得分:3)
你确定失败了吗?你最初的例子对我来说很好。
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非常明确,但考虑到你包含了parens,你真的没有必要使用or
。使用||可能更好,它与其他运算符一样具有高优先级,并且更常见。我认为使用or
看起来像英语并不是一个好习惯。它在语言中具有语义含义,可能最适合用于那些品质。
选项2当然很愚蠢。如果你要包括parens,你也可以使用它们作为方法签名。
希望这有帮助。
答案 2 :(得分:3)
Avdi Grimm认为you shouldn't使用and
或or
作为布尔逻辑。您应该只有and
或or
用于控制流程(类似于if
或unless
)
根据他的建议,您应该使用||
代替:
array.include?('foo') || array.include?('bar')
答案 3 :(得分:2)
选项1是首选,因为它也适用于其他语言。选项2看起来像LISP,现在不流行。