我有一个功能:
def g
''.each_line.next
end
Run Code Online (Sandbox Code Playgroud)
由于each_line在空字符串上返回行迭代器,因此next引发异常StopIteration: iteration reached an end.
除此之外,我有另一个功能:
def f
catch :aSymbol do
loop do
g
end
end
end
Run Code Online (Sandbox Code Playgroud)
catch:aSymbol如果符号被抛出某个地方将会捕获该符号,但事实并非如此,因此该函数应该引发相同的异常.但是,打电话f不这样做; 它的行为,好像catch也会默默地拯救这个例外.这是预期的行为吗?
这与catch无关 - 可以观察到行为
def f
loop do # Loop will abort during first iteration
g
end
end
Run Code Online (Sandbox Code Playgroud)
这是因为loop救援StopIteration和解释意味着你想要突破loop(参见循环的定义)
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |