【发布时间】:2011-06-03 20:25:26
【问题描述】:
我刚刚向question 询问了关于 return 的问题,它似乎与 break 做同样的事情。你如何使用return,你如何使用break,例如在你编写的实际代码中,以解决可以使用这些构造的问题。
我不能真正发布示例,因为我不知道如何使用这些示例,所以它们没有多大意义。
【问题讨论】:
我刚刚向question 询问了关于 return 的问题,它似乎与 break 做同样的事情。你如何使用return,你如何使用break,例如在你编写的实际代码中,以解决可以使用这些构造的问题。
我不能真正发布示例,因为我不知道如何使用这些示例,所以它们没有多大意义。
【问题讨论】:
另一个例子是,如果您在一个方法中有两个循环,如果您想退出第一个循环并继续第二个循环,请在第一个循环中使用 break,反之亦然:
def testing(method)
x=1
10.times do
if(x == 2)
break if method == "break"
end
x+=1
end
10.times do
if(x == 5)
return if method == "return"
end
x+=1
end
end
【讨论】:
我想编辑批准的答案以简化示例,但我的编辑被拒绝,并建议提出新的答案。所以这是我的简化版:
def testing(target, method)
(1..3).each do |x|
(1..3).each do |y|
print x*y
if x*y == target
break if method == "break"
return if method == "return"
end
end
end
end
我们可以看到尝试的不同:
testing(3, "break")
testing(3, "return")
第一个结果(break 语句仅在达到3 时才退出最内层循环):
1232463
最后的结果(return 语句退出整个函数):
123
【讨论】:
return 退出整个函数。
Break 从最里面的循环退出。
因此,在这样的函数中:
def testing(target, method)
(0..100).each do |x|
(0..100).each do |y|
puts x*y
if x*y == target
break if method == "break"
return if method == "return"
end
end
end
end
要查看差异,请尝试:
testing(50, "break")
testing(50, "return")
【讨论】:
(0..10).each 和testing(5, "break") 以提高可读性。谢谢你,很好的答案
next,它在循环中移动到next迭代,并且也接受一个值,就像return和break一样。
break 从循环内部调用。它会将您置于您所在的最内层循环之后。
return 从方法内部调用。它会返回你告诉它的值,并把你放在它被调用的地方。
【讨论】: