3

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

有这样的原因吗?

4

1 回答 1

6
  • loop是一种方法 (in Kernel),它确实需要一个带有do...endor的块{ }
  • whileuntil是语句(如if),不要指望一个块。关键字是可选的do,但它不表示一个块(例如while x == 100 { puts x; x+=1; },将失败loop { puts x; x+=1; break if x == 100 }得很惨,而工作正常。)

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

于 2009-03-13T05:37:05.940 回答