运行以下Ruby代码片段时出现语法错误。
catch(:outer)
m, n = 1,1
loop do
catch(:inner)
for i in 3 .. 100
m, n = (m*2), m
throw :outer if m > 9_999
throw :inner if m > 5_000
end # for-loop
end # catch(:inner)
end # loop
end # catch(:outer)
#=> syntax error, unexpected keyword_end, expecting $end
它不喜欢最后的两个end
语句。这有什么问题?
答案 0 :(得分:4)
正确的语法是:
catch(:outer) do
m, n = 1,1
loop do
catch(:inner) do
for i in 3 .. 100
m, n = (m*2), m
throw :outer if m > 9_999
throw :inner if m > 5_000
end # for-loop
end # catch(:inner)
end # loop
end # catch(:outer)
ruby块与do-end对匹配{}, catch-end不是像for-end那样的ruby语句
答案 1 :(得分:2)
do
之后的catch
与end
匹配。 end
必须与do
或关键字(例如class
,module
,begin
)匹配。 catch
是一种方法,而不是关键字。