【问题标题】:Kernel.loop method requires 'do' . Semicolon not allowed?Kernel.loop 方法需要 'do' 。不允许分号?
【发布时间】:2010-10-13 02:06:54
【问题描述】:

对于某些结构,我可以选择使用分号或do 关键字来分隔语句的结尾,如下面的until 示例所示。

until x == 100 do puts x; x+=1 end 

until x == 100; puts x; x+=1 end 

Kernel.loop 无法做到这一点。

x=0    
loop do puts x; x+=1; break if x == 100 end

x=0    
loop; puts x; x+=1; break if x == 100 end # => error

这样是有原因的吗?

【问题讨论】:

    标签: ruby syntax loops kernel


    【解决方案1】:
    • loop 是一种方法(在 Kernel 中),它确实需要带有 do...end{ } 的块。
    • whileuntil 是语句(如 if),不要期望阻塞。 do 关键字是可选的,但它并不表示一个块(例如,while x == 100 { puts x; x+=1; } 会失败,而 loop { puts x; x+=1; break if x == 100 } 会正常工作。)

    所以,do 在两种情况下的含义不同。在loop(和其他方法)的情况下,它实际上表示一个块;在whileuntil 等的情况下,它只是语法糖(就像thenif 之后一样。)不要被误导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2016-12-12
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多