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

Ruby Kernel.loop方法需要';做'。不允许使用分号?,ruby,syntax,loops,kernel,Ruby,Syntax,Loops,Kernel,对于某些构造,我可以选择使用分号或do关键字来分隔语句的结尾,就像下面的until示例一样 until x == 100 do puts x; x+=1 end until x == 100; puts x; x+=1 end 但是这在内核.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 # => err

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

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

until x == 100; puts x; x+=1 end 
但是这在
内核.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
这有什么原因吗?

  • 循环
    是一种方法(在
    内核
    中),它确实需要一个带有
    do…end
    {}
    的块
  • while
    until
    是语句(如
    if
    ),不需要块。
    do
    关键字是可选的,但它并不表示块(例如,
    whilex==100{puts x;x+=1;}
    将失败得很惨,而
    loop{puts x;x+=1;如果x==100},则中断将正常工作。)
因此,
do
在这两种情况下的含义不同。在
循环
(和其他方法)的情况下,它实际上表示一个块;在
的情况下,while
直到
等等。这只是语法上的糖分(就像
那么
之后,如果
)不要被误导