3

whileバージョンが式を評価する方法に注意してください。ただし、ifバージョンは評価しません。

begin
  puts 'hi'
  1
end while false
# => hi
# => nil 

begin 
  puts 'hi'
  1
end if false
# => nil 

しかし、begin...なしで式を使用するendと、熱心に評価されません。

puts 'hi' while false
# => nil 

この一見矛盾する理由はありますか?

4

3 に答える 3

3

(begin-end-while他の言語では do-while とも呼ばれます)は、コードのブロックを少なくとも1 回実行し(したがって、「hi」の出力につながります)、条件が満たされる限りそれを繰り返すことになっています。

while X
    Y
end

等しくない:

begin
    Y
end while X

Y条件が満たされない場合、最初のコード ブロックは決して実行されませXん。2 つ目は、まずコード ブロックをY1 回評価し、条件が満たされているかどうかを確認します。満たされている場合は、条件が と評価されるまでXブロックYを何度も実行します。Xfalse

代わりに、通常のbegin-end-ifブロックは、他の if ブロックと同じように見なされます。条件式が に評価される場合、無視されます (または単に実行されません) false

if X
    Y 
end

代わりに、次のようになります。

begin
    Y
end if X

これは次と同じです:

Y if X
于 2013-08-14T20:13:05.353 に答える
0

後置記法は、事前に条件付きにするための省略形です。これは、条件が事前にあるために、インタープリターによって「書き換え」られます。

ただし、do-while ループは独自のループ タイプです。これは、前に while() を付けることの省略形ではありません。

于 2013-08-14T20:13:44.673 に答える