gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:39 25 4
gpt4 key购买 nike

我用 Ruby 创建了一个乒乓测试。它猴子修补了Fixnum用新方法上课,ping_pong , 在 (0..self) 范围内循环,检查每个元素的一些条件,并构造一个结果数组。

结果数组将有 Ping对于可被 3 整除的范围内的数字, Pong对于可被 5 整除的数字, 和 Ping-Pong对于可被两者整除的数字。

我现在的问题是,为什么代码只有在以下情况下才有效:

elsif (num.%(3) == 0) && (num.%(5) == 0) array.push("Ping-Pong")

领先于其他elsif声明?我试着把它放在另一个 elsif 之后s 但它没有用。

这是我的代码:

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

最佳答案

当你有多个 if/elsif block 链接在一起时,只有其中一个会运行,第一个条件为真的 block 将是运行。因此, block 的顺序很重要。例如:

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

即使这些 block 的条件都为真,也只有第一个运行。如果你想让两者都运行,请使用两个单独的 if block ,如下所示:

if true
puts 'this code will run'
end

if true
puts 'this code will also run'
end

关于ruby - 为什么更改条件语句的顺序会破坏我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com