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は、またはKernelを含むブロックを実際に必要とするメソッド(in )です。do...end{ }
  • whileおよびuntilは(のような)ステートメントifであり、ブロックを期待していません。キーワードはオプションですが、doブロックを示すものではありません(たとえばwhile x == 100 { puts x; x+=1; }、惨めに失敗しますが、問題なく機能しloop { puts x; x+=1; break if x == 100 }ます)。

つまり、do2つの場合で異なることを意味します。(および他の方法)の場合、loopそれは実際にはブロックを示します。などの場合はwhileuntil単なるシンタックスシュガーです(then後と同じようにif)。誤解しないでください。

于 2009-03-13T05:37:05.940 に答える