如果我有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
。
答案 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语句。