Kernel.loop方法需要'do'。不允许使用分号?

时间:2009-03-13 03:54:53

标签: ruby syntax loops kernel

对于某些构造,我可以选择使用分号或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

有这样的原因吗?

1 个答案:

答案 0 :(得分:6)

  • 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等情况下,它只是语法糖(就像then之后的if一样。)不要被误导。