对于某些构造,我可以选择使用分号或do关键字来分隔语句的结尾,如until下面的示例所示.
until x == 100 do puts x; x+=1 end
until x == 100; puts x; x+=1 end
Run Code Online (Sandbox Code Playgroud)
但这是不可能的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
Run Code Online (Sandbox Code Playgroud)
这有什么原因吗?
loop是一个方法(in Kernel),真正需要一个块do...end或{ }.while并且until是陈述(如if),并且不要指望一个块.该do关键字是可选的,但它并不表示一个块(例如while x == 100 { puts x; x+=1; }就会失败,而loop { puts x; x+=1; break if x == 100 }将工作得很好.)因此,do在两种情况下意味着不同的东西.在loop(和其他方法)的情况下,它实际上表示一个块; 在等等的情况下while,until它只是语法糖(就像then之后的那样if.)不要被误导.
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |