我正在阅读“The Ruby Programming Language”并想尝试书中提供的示例(第 6 章,改变控制流,catch 和 throw),以使用 catch/throw 打破嵌套循环:
for matrix in data do
catch :missing_data do
for row in matrix do
for value in row do
throw :missing_data unless value
puts value
end
end
end
end
我将数据定义为三个矩阵的数组:
数据 => [[[2, 3, 7], [8, 9, 10], [0, 1, 4]], [["a", "b", "c"], ["d", false, "e"], ["f", "g", nil]], [["abc", "def"], ["ghi", "jkl"]]]
然而,当我在 IRB(版本 1.9.3p327)中尝试代码时,我得到一个“意外的 $end,期待 keyword_end”错误。我尝试过使用代码并发现如果我删除最外面的(即 for)循环它可以工作,但是使用循环我得到了错误。为了仔细检查,我创建了一个更简单的循环:
for i in [1,2,3] do
catch :two do
if i==2 then throw :two end
end
end
再次,我得到相同的情况:for循环出错,没有for循环没有错误(实际上,使用IRB,我没有机会进入最后一个'end',但进入第四个后得到错误上一行)。
有谁知道我为什么会收到这个错误?