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; &&并且||也可接受但不太清楚。