Ruby用逻辑语句控制流程
示例
尽管看起来似乎违反直觉,但是您可以使用逻辑运算符来确定是否运行语句。例如:
File.exist?(filename) orSTDERR.puts"#{filename} does not exist!"
这将检查文件是否存在,如果不存在则仅打印错误消息。该or语句是惰性的,这意味着一旦确定值是true还是false它将停止执行。一旦发现第一个术语为真,就无需检查另一个术语的值。但是,如果第一项为假,则必须检查第二项。
通常的用途是设置默认值:
glass = glass or 'full' #乐天派!
glass如果尚未设置,则将其值设置为“full”。简而言之,您可以使用以下符号的版本or:
glass ||= 'empty' #悲观主义者。
仅当第一个语句为false时,才可能运行第二条语句:
File.exist?(filename) and puts "#{filename} found!"
同样,andlazy是惰性的,因此仅在必要时才执行第二条语句以得出一个值。
该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;&&并且||也可接受但不太清楚。