http://www.themomorohoax.com/2008/12/08/and-vs-amperand-in-ruby
>> alien = true
>> speaks_english = false
# 1
>> alien and speaks_english ? 'hello' : '**silence**'
=> "**silence**"
# 2
>> alien && speaks_english ? 'hello' : '**silence**'
=> "**silence**"
# 3
>> speaks_english and alien ? 'hello' : '**silence**'
=> false # oops
# 4
>> speaks_english && alien ? 'hello' : '**silence**'
=> "**silence**"
>> hammer_of_truth = true
>> anvil_of_false = false
>> sword = hammer_of_truth && anvil_of_false
=> false
>> sword
=> false
>> sword = hammer_of_truth and anvil_of_false
=> false
>> sword
=> true # oops
我 and 只是偶尔用在流程控制上,比如
sleep 5 and p 'sleep 5 seconds' and break 看着也不差,写多行感觉太多了
ruby 操作符优先级最低的三个是 not, and, or, 相应的 !, &&, || 的优先级比它们高很多。这就是它们最大的区别。我觉得反而 not 最特别:它身为一元操作符,优先级却极其低
想起了之前一篇文章专门讲a ||= b
与a = a || b
的区别,看了之后虽然懂了,但感觉很蛋疼。希望这种需要拗脚尖的问题越小越好,对已对别人阅读代码都无益。
晕,我看着第一行就不对,@huacnlee 你做过测试吗?
alien and speaks_english ? 'hello' : '**silence**'
很明显,这个等价于:alien and (speaks_english ? 'hello' : 'silence'), 结果应该为 true.
我觉得你这样讲是不对的。也许你之前用了太久其他语言,但是在 Ruby 中,and or not 优先级极低 (只比 if 高一点点), 这样设定的原因是:在不加括号的前提下,不会影响到其他逻辑的正确性,换句话说,大多数情况下,你尽管去写代码好了,甚至不用考虑是否加括号。?: 算是一个例外,好的风格建议是:(...) ? (...) : (...) .
alien = true
speaks_english = false
p alien and speaks_english ? 'hello' : '**silence**'
你觉得这个代码,执行结果是什么?你自己运行下