x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end
有沒有辦法讓case語句像vanilla switch一樣?這樣它纔會在爆發之前循環所有的「什麼時候的」?我很驚訝ruby的行爲幾乎與elsif
一樣。Ruby刪除Case語句中的隱式斷點? (如何製作像Switch這樣的案例)
x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end
有沒有辦法讓case語句像vanilla switch一樣?這樣它纔會在爆發之前循環所有的「什麼時候的」?我很驚訝ruby的行爲幾乎與elsif
一樣。Ruby刪除Case語句中的隱式斷點? (如何製作像Switch這樣的案例)
邁克爾,
雖然你的例子是有點誤導,你就可以使用簡單的(「鮑勃」兩個「鮑勃」和「鮑勃」,所以第一種情況下將始終與匹配),如果就像在下面if_test
方法:
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
誤導性 - 它是故意完成的。我在問是否有開關選擇。或者無論如何要做個案:當行爲像一個開關(不要在第一次發現案件後發生)。這是一篇很棒的文章,很明顯,你花了很多時間,我會在週末讓它燉。如果沒有其他答案,我會接受。 –
好吧,邁克爾,我明白了。所以可能你希望文本是'但我也想在這裏停止'。 – leucos
是的,我認爲讓它循環遍歷所有條件也是有用的。我一直在堆疊如果塊,但它不是很好。 –
編號案例陳述評估第一個when
塊,其目標的===
方法在通過比較時評估爲true
,並在此處停止。
我認爲ruby應該提供另一個案例/當它像C中的開關/案例一樣工作。 –
那不是等同於堆疊(未嵌套)如果塊? –
也許一個不太人爲的例子會有所幫助。你應該使用正確的工具來完成這項工作,而我猜測'case'不是它。 –
我想證明switch會同時執行'puts'。在滿足第一個條件後,「case」發生在「停在這裏」。堆疊如果塊是替代品,但不是超過一行的漂亮。 –