相当于 Ruby 中的“继续”

问题描述 投票:0回答:9

在 C 和许多其他语言中,有一个

continue
关键字,当在循环内部使用时,会跳转到循环的下一次迭代。 Ruby 中是否有与此
continue
关键字等效的内容?

ruby keyword continue
9个回答
1078
投票

是的,它叫

next

for i in 0..5
   if i < 2
     next
   end
   puts "Value of local variable is #{i}"
end

输出以下内容:

Value of local variable is 2
Value of local variable is 3
Value of local variable is 4
Value of local variable is 5
 => 0..5 

128
投票

next

另外,请查看

redo
,它重做了 current 迭代。


110
投票

用稍微更惯用的方式写Ian Purton的答案

(1..5).each do |x|
  next if x < 2
  puts x
end

打印:

  2
  3
  4
  5

44
投票

在 for 循环和迭代器方法(如

each
map
)中,ruby 中的
next
关键字将具有跳转到循环的下一次迭代的效果(与 C 中的
continue
相同)。

然而它实际上所做的只是从当前块返回。因此,您可以将它与任何采用块的方法一起使用 - 即使它与迭代无关。


34
投票

Ruby 还有另外两个循环/迭代控制关键字:

redo
retry
在 Ruby QuickTips 中了解有关它们的更多信息以及它们之间的区别。


10
投票

我认为它叫做下一个


2
投票

有条件的话可以使用下

before = 0
"0;1;2;3".split(";").each.with_index do |now, i|
    next if i < 1
    puts "before it was #{before}, now it is #{now}"
    before = now
end

输出:

before it was 0, now it is 1
before it was 1, now it is 2
before it was 2, now it is 3

1
投票

使用 next,它将绕过该条件,其余代码将起作用。 下面我提供了完整的脚本和输出

class TestBreak
  puts " Enter the nmber"
  no= gets.to_i
  for i in 1..no
    if(i==5)
      next
    else 
      puts i
    end
  end
end

obj=TestBreak.new()

输出: 输入号码 10

1 2 3 4 6 7 8 9 10


0
投票

后期添加:您可能根本不想使用

next
,而是拒绝任何小于
2
的值,然后打印其余的值。

通过使用

#lazy
,我们可以避免在
.reject { |x| x < 2 }
阶段创建中间数组。对于这么小的样本量来说意义不大,但如果我们在
(0..10_000_000)
上运行它,就会更有意义。

(0..5).lazy.reject { |x|
    x < 2
}.each { |x|
    puts x
}
© www.soinside.com 2019 - 2024. All rights reserved.