catch/try 块在 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(: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匹配的doend必须与do或关键字(如classmodulebegin)匹配。catch是一种方法,而不是关键字。

最新更新