Ruby 捕捉/尝试块不';我不能用红宝石跑步

Ruby 捕捉/尝试块不';我不能用红宝石跑步,ruby,Ruby,运行以下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

运行以下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
之后没有与
结尾匹配的
do
end
必须与
do
或关键字匹配(例如
模块
开始
)。捕获是一种方法,而不是关键字。

正确的语法是:

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不是像for-end那样的ruby语句

请考虑
catch-value-do..
语法。是的,这就是罪魁祸首。非常感谢