Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 多条件分步断环_Ruby - Fatal编程技术网

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吗?是的,更新的版本比原来的版本更令人困惑。投票结束。