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
,直到
等等。这只是语法上的糖分(就像那么
在之后,如果
)不要被误导