x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end
ケースステートメントをバニラスイッチのように動作させる方法はありますか? 勃発する前にすべての「いつ」を循環するように?ruby が とほぼ同じように動作することに驚いていますelsif
。
x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end
ケースステートメントをバニラスイッチのように動作させる方法はありますか? 勃発する前にすべての「いつ」を循環するように?ruby が とほぼ同じように動作することに驚いていますelsif
。
マイケル、
あなたの例は少し誤解を招くものですが(「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
いいえ。Case ステートメントは、比較を通過したときにwhen
ターゲットの===
メソッドが評価される最初のブロックを評価し、そこで停止します。true