2009-03-13 18 views
3

特定の構文では、untilの例のように、文の終わりを区切るためにセミコロンまたはdoキーワードを使用するかどうかを選択できます。Kernel.loopメソッドには 'do'が必要です。セミコロンは使用できませんか?

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 

このような理由がありますか?

答えて

6
    loop
  • 本当にdo...end又は{ }有するブロックを必要とする(Kernelで)方法です。
  • whileおよびuntilはステートメント(ifなど)であり、ブロックが必要ではありません。 doキーワードはオプションですが、それはブロックを表すものではありません(loop { puts x; x+=1; break if x == 100 }がうまく動作します、一方、例えばwhile x == 100 { puts x; x+=1; }は、無残に失敗します。)

ので、doは、2つのケースで異なるものを意味します。 loop(および他の方法)の場合、実際にはブロックを表します。 whileの場合はuntilなどです。文法砂糖だけです(thenifのようになります)。誤解しないでください。

+0

偉大な答え。ありがとう。 –

関連する問題