用逻辑语句控制流程
虽然它看似违反直觉,但你可以使用逻辑运算符来确定是否运行语句。例如:
File.exist?(filename) or STDERR.puts "#{filename} does not exist!"
这将检查文件是否存在,如果不存在则仅打印错误消息。or
语句是懒惰的,这意味着一旦确定它的值是真还是假,它就会停止执行。一旦发现第一项是真的,就没有必要检查另一项的值。但如果第一个词是假的,它必须检查第二个词。
常用的是设置默认值:
glass = glass or 'full' # Optimist!
如果 glass
尚未设置,则将其设置为 full
。更简洁地说,你可以使用 or
的符号版本:
glass ||= 'empty' # Pessimist.
只有当第一个语句为 false 时,才可以运行第二个语句:
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
;&&
和||
也可以接受但不太清楚。