如果和红宝石在同一条线上

时间:2014-08-21 13:34:43

标签: ruby

我正试图找到一种方法将这一切放在一行:

if Servers.empty?
  puts "Specify some servers in $@"
  exit
end

我尝试了这个,但它不起作用

puts "Specify from servers in $@" and exit if Servers.empty?

我如何把这一切都放在一条线上?

6 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

2.0.0-p451 :010 > (puts "Specify from servers in $@"; puts "exit") if [].empty?
Specify from servers in $@
exit

VS

2.0.0-p451 :011 > (puts "Specify from servers in $@"; puts "exit") if ['a'].empty?
 => nil 

所以在你的情况下你会做...

(puts "Specify from servers in $@"; exit) if Servers.empty?

答案 1 :(得分:3)

为什么不将它包装在方法中?

def exit_with(message)
  puts message
  exit
end

exit_with("Specify from servers in $@") if Servers.empty?

答案 2 :(得分:3)

可能的解决方案:

解决方案1 ​​

abort("Specify some servers in $@") if Servers.empty? # To STDERR

解决方案2

class NoServerFound < StandardError; end

raise NoServerFound, "Specify some servers in $@" if Servers.empty?

答案 3 :(得分:3)

puts返回nil,这是假的,这就是您的代码不起作用的原因。如果你想使用这个技巧,最好在这种情况下使用or ......

puts "Specify from servers in $@" or exit if Servers.empty?

答案 4 :(得分:1)

这是一个单行:

fail("Specify from servers in $@") if Servers.empty?

fail就像是putsexit的组合。默认情况下,它会引发RuntimeError,但您可以选择任何错误或创建自己的错误。

答案 5 :(得分:0)

不适用于exit,但在类似的情况下,我这样做:

exit puts "Specify from servers in $@" if Servers.empty?

我经常这样做的一个实际案例是:

return puts "something went wrong" if blah_blah