next
语句用于跳过循环的一部分并继续循环的下一次迭代。它可以与 for
和 while
语句结合使用。
我见过有人在评估某些条件后出现复杂的代码时使用 next,即
next if @state!=:some_state
# some long complicated code
现在我已经在我的 IRB
中使用了 next
如下:
n = 1
loop do
n = n + 1
next unless n == 10
print "Good"
break
end
# Good=> nil
上面那个明白了。非常清晰。
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi" unless n == 5
p "good"
break
end
#1hi
#2hi
#3hi
#4"good"
#=> nil
在上面的代码中,无法理解 puts "hi"
和 unless n == 5
这几行的执行顺序。哪个先执行?
下面的代码会导致无限循环
。
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi"; 2 + 3 unless n == 5
p "good"
break
end
而这个很好:
n = 1
#=> 1
loop do
print "#{n}"
n = n + 1
next puts "hi", 2 + 3 unless n == 5
p "good"
break
end
#1hi
#5
#2hi
#5
#3hi
#5
#4"good"
#=> nil
请在这里帮助我理解 - 这个如何解决 forever
循环?
最佳答案
分号被评估为换行符,因此:
next puts "hi"; 2 + 3 unless n == 5
相当于:
next puts "hi"
2 + 3 unless n == 5
因此,next
将始终被调用,您将有一个无限循环。
逗号被评估为传递一组参数(被 puts
方法签名解释为数组),所以:
next puts "hi", 2 + 3 unless n == 5
相当于:
next puts("hi", 2 + 3) unless n == 5
关于 puts
和 unless
的执行顺序 - 请考虑以下内容:
unless n == 5
next puts "hi"
end
在这个例子中,很明显 unless
首先被评估,然后如果传递的条件被评估为 false 则执行 next puts "hi"
语句。嗯:
next puts "hi" unless n == 5
是完全相同的东西的简写。所以 unless
修饰符总是先被求值。自然地,如果您在中间插入一个分号,这将导致对它进行不同的评估,因为分号被评估为换行符。
关于ruby - ruby中 `next`与 `unless`时执行顺序混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211827/