如果首次成功使用ruby,如何运行2个命令?

时间:2015-01-20 08:46:27

标签: ruby command logical-operators

我想在ruby中运行2个命令,但前提是第一个命令成功。

在bash中我会使用&&运算符。我尝试了这个和and关键字,但&&引发了错误,而and运算符未按预期运行。

我想用它的例子:

#!/usr/bin/ruby
#
puts "asd" and puts "xxx"

执行:

$ ./asd.rb
asd

1 个答案:

答案 0 :(得分:2)

关键字and的优先级低于&&。两者都使用short-circuit evaluation

首先,请注意puts始终返回nil。在ruby中,nil是假的。

2.2.0 :002 > puts "asdf"
asdf
 => nil

现在我们尝试你的例子:

2.2.0 :002 > puts "asd" and puts "xxx"
asd
 => nil

这与:

相同
puts("asd") && puts("xxx")
asd
 => nil

在这两种情况下,puts "asd"puts("asd")都会返回nil,因此puts "xxx"puts("xxx")永远不会被评估,因为nil是假的,而且很短 - 正在使用电路评估。

您还尝试了puts "asd" && puts "xxx",但这是一个语法错误,因为&&运算符具有更高的优先级。

puts "asd" &&  puts "xxx"
SyntaxError: (irb):3: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
puts "asd" &&  puts "xxx"
                     ^

这是因为puts "asd" && puts "xxx"puts("asd" && puts) "xxx"相同。

2.2.0 :012 > puts("asd" && puts) "xxx"
SyntaxError: (irb):12: syntax error, unexpected tSTRING_BEG, expecting end-of-input
puts("asd" && puts) "xxx"
                     ^

另请参阅:this related post