Ruby 多条件分步断环
当我的一个条件满足时,我想停止循环,但它们是按顺序(一步一步)进行的,不能在一瞬间全部调用 我需要检查一个条件,然后使用Ruby 多条件分步断环,ruby,Ruby,当我的一个条件满足时,我想停止循环,但它们是按顺序(一步一步)进行的,不能在一瞬间全部调用 我需要检查一个条件,然后使用next跳过循环。代码在多个条件下看起来很难看 array.each do|x| 新的变量变量=条件变量?func1(x):func2(x) 下一步如果检查条件1 新的变量2=条件2?func3(新变量)func4(新变量) 下一步如果检查条件2检查条件x包括分配的新变量 新的变量3=条件3?func5(新变量)func2:func6(新变量)func1 下一步如果检查条件3
next
跳过循环。代码在多个条件下看起来很难看
array.each do|x|
新的变量变量=条件变量?func1(x):func2(x)
下一步如果检查条件1
新的变量2=条件2?func3(新变量)func4(新变量)
下一步如果检查条件2检查条件x包括分配的新变量
新的变量3=条件3?func5(新变量)func2:func6(新变量)func1
下一步如果检查条件3
##等
结束
我想把它改写得更优雅些。它是否可以在动态方法中编程
更新:感谢大家提出我的新手问题,但我修改了我的示例以更好地描述我的问题:实际上,它需要在每个步骤中分配新变量。如果检查条件不满足,我应该跳过下一步。实际上,condition\u
和function\u
是非常长的一步,这使得我的代码非常愚蠢
试着画出更多的好答案,
我认为这样做的一个方法是:
array.each do |x, condition_| ## each element is [x, true]
(condition_ = false; next) if
x.nil? || x.respond_to?("string") || x+y[x] == 4
end
另外,对于
@kimmo letho,也不需要,答案很好(第二部分,条件实际上被修改了)
我想添加一个更惯用的版本,只是为了完整性,因为在注释中添加代码并不容易
array.each do |item|
x, _ = item
case
when x.nil?
item[1] = false
when x.respond_to?("string")
item[1] = 'it is a string'
end
end
另一方面,我的印象是,您正在循环之前手动构建[x,true]
数组。如果您只需要打印(或返回)具有真实条件的项目,您可以做得更好:
# xs => [x1, x2, x3, ...]
# where your original array was [[x1, cond1], [x2, cond2], ...]
xs.reject do |x|
x.nil? || x.respond_to?("string") || x+y[x] == 4
end
如果您已经有一些错误的条件,并且希望保留前一个条件:
# array => [[x1, cond1], [x2, cond2], ...]
array.map do |x, cond|
[x, cond && !(x.nil? || x.respond_to?("string") || x+y[x] == 4)]
end
这肯定没有什么意义1它是ruby吗?是的,更新的版本比原来的版本更令人困惑。投票结束。