if语句:检查哪个条件符合条件

时间:2013-09-04 22:39:43

标签: ruby variables if-statement

如果我有if语句

x = 2
y = 1
if x == nil || y == nil || z == nil
  raise "RuntimeError: Argument is nil"
end

是否可以做类似

的事情
raise "RuntimeError: ${Argument} is nil"

其中参数是nil的变量?或者,我是否必须将条件分开才能发挥作用?

if x == nil 
  raise "RuntimeError: x is nil"
end

if y == nil 
  raise "RuntimeError: y is nil"
end

if z == nil 
  raise "RuntimeError: z is nil"
end

是否可以找到if语句的哪个条件通过,以便执行该块中的代码?在这种情况下,它将是z == nil

4 个答案:

答案 0 :(得分:2)

也许你可以用哈希来做:

{x: x, y: y, z: z}.each do |k, v|
  raise "RuntimeError: #{k} is nil" unless v
end

答案 1 :(得分:2)

虽然这样的事情“有效”:

%w(x y z).each { |var| raise "#{var} is nil" if eval(var).nil? }

我会写单行:

raise "x is nil" if x.nil?
raise "y is nil" if y.nil?
raise "z is nil" if z.nil?

理解起来要容易得多。

答案 2 :(得分:0)

如果你能避免照顾nil,你可以写

raise "RuntimeError: an element in this range is nil" if [x, y, z].include? nil

答案 3 :(得分:0)

这也可行:

 w = 1
 x = nil
 y = 4
 z = nil

 a = ['w', 'x', 'y', 'z'].find {|e| !eval(e)}
 raise RuntimeError, ": #{a} is nil" if a

- > RuntimeError :: x是nil

...但我认为你最好使用简单的if / then或case语句。