我在运行以下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
语句。它怎么了?
正确的语法为:
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端对或{}匹配,catch-end不是像用于end 的ruby语句
在catch
之后没有与end
匹配的do
。end
必须与do
或关键字(如class
、module
、begin
)匹配。catch
是一种方法,而不是关键字。