我想在ruby中运行2个命令,但前提是第一个命令成功。
在bash中我会使用&&
运算符。我尝试了这个和and
关键字,但&&
引发了错误,而and
运算符未按预期运行。
我想用它的例子:
#!/usr/bin/ruby
#
puts "asd" and puts "xxx"
执行:
$ ./asd.rb
asd
答案 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