为什么更改条件的顺序会破坏我的代码?

时间:2015-04-25 02:01:13

标签: ruby

我在Ruby中创建了一个乒乓球测试。它使用新方法Fixnumping_pong类进行修补,它循环遍历范围(0..self),检查每个元素的某些条件,并构造结果数组。

结果数组的Ping数字可以被3整除,Pong可以被5整除,Ping-Pong可以被elsif (num.%(3) == 0) && (num.%(5) == 0) array.push("Ping-Pong") 整除由两者组成。

我现在的问题是,为什么代码仅在部件中起作用:

elsif

领先于其他elsif陈述?我尝试将其放在其他class Fixnum define_method(:ping_pong) do array = [0] total = (0..self) total = total.to_a total.each() do |num| if (num == 0) array.push(num) elsif (num.%(3) == 0) && (num.%(5) == 0) array.push("Ping-Pong") elsif (num.%(3) == 0) array.push("Ping") elsif (num.%(5) == 0) array.push("Pong") else array.push(num) end end array end end 之后,但它没有用。

这是我的代码:

FileReader fr = new FileReader(location.getAbsolutePath());
JSONArray iIndexes = (JSONArray) parser.parse(fr);

1 个答案:

答案 0 :(得分:5)

当您将多个if / elsif块链接在一起时,只会运行其中一个块,并且第一个具有真实条件的块将是要运行的块。所以,块的顺序很重要。例如:

if true
  puts 'this code will run'
elsif true
  puts 'this code will not run'
end

即使这些块的条件都为真,也只运行第一个块。如果您想同时运行,请使用两个单独的if块,如下所示:

if true
  puts 'this code will run'
end

if true
  puts 'this code will also run'
end