4
x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end

ケースステートメントをバニラスイッチのように動作させる方法はありますか? 勃発する前にすべての「いつ」を循環するように?ruby が とほぼ同じように動作することに驚いていますelsif

4

2 に答える 2

8

マイケル、

あなたの例は少し誤解を招くものですが(「bob」は「bob」と「bob」の両方に一致するため、最初のケースは常に一致します)、if_test以下のメソッドのように単純なifを使用できます:

def case_test(x)                                                  
  puts case
  when x > 3
    "ct: #{x} is over 3"
  when x > 4
    "ct: #{x} is over 4"
  end   
end     

case_test(4)
case_test(5)

def if_test(x)
  puts "it: #{x} is over 3" if x > 3
  puts "it: #{x} is over 4" if x > 4
end     

if_test(4)
if_test(5)

これにより、次の結果が得られます。

ct: 4 is over 3
ct: 5 is over 3
it: 4 is over 3
it: 5 is over 3
it: 5 is over 4

で複数のステートメントを使用することもできることに注意してくださいwhen。これは、実際のユースケースに応じて役立つ場合とそうでない場合があります。

def many(x)              
  case x                 
  when 'alice','bob'     
    puts "I know #{x}"
  else·                  
    puts "I don't know #{x}"                                      
  end                    
end                      

many('alice')            
many('bob') 
many('eve')

利回り :

I know alice
I know bob
I don't know eve
于 2012-05-25T18:44:40.113 に答える
3

いいえ。Case ステートメントは、比較を通過したときにwhenターゲットの===メソッドが評価される最初のブロックを評価し、そこで停止します。true

于 2012-05-25T18:37:17.360 に答える