catch / try块不在Ruby中运行

时间:2014-10-04 04:35:10

标签: 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语句。这有什么问题?

2 个答案:

答案 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之后的catchend匹配。 end必须与do或关键字(例如classmodulebegin)匹配。 catch是一种方法,而不是关键字。