2010-01-25 15 views
5

bir sonra maddesi içinde durum açıklamaları ifade erişmek isteyen bir deyişle, bu durumda İfade gıda akım değeri olacaktır Bir ruby ​​case ifadesinden ifadeye erişmenin herhangi bir yolu var mı?

food = "cheese" 
case food 
when "dip" then "carrot sticks" 
when "cheese" then "#{expr} crackers" 
else 
    "mayo" 
end 

. Bu durumda, bildiğim kadarıyla değişken yiyeceğe erişebildim, ancak değerin artık erişilebilir olmadığı durumlar olabilir (array.shift vb ..). Expr'yi yerel bir değişkene taşımanın ve daha sonra ona erişmenin dışında, expr'nin davalarının değerine doğrudan erişmenin bir yolu var mıdır?

Roja

p.s. Biliyorum ki bu özel örnek, onun örnek bir senaryosunu önemsiz kılıyor.

cevap

3

nereden: = "cheese" `

food = "cheese" 

x = case food 
    when "dip" then "carrot sticks" 
    when /(cheese|cream)/ then "#{ $1 } crackers" 
else 
    "mayo" 
end 

puts x # => cheese crackers 
+0

Hmm ben bu olduğunu düşünüyorum Gerçekten de "yol" utancı, bir dünyaya atandığında utanç duyuyor: S Çok şükredin! –

+2

'x' Burada herhangi bir kapsamın bir değişken olabilir. Sadece bir globale atarsanız bir global atar. Ruby'deki bu her şey, durum halindeki durum bir değer döndürür. Seçtiğiniz bir değişkendeki basit ve isteğe bağlı olarak bu değeri yakalarsınız. –

+3

Bu sadece eşleme kullanıyorsanız, işe yarar görünüyor çünkü 1 $ eşleşmenin sonucudur. Eşleştirme kullanmıyorsanız, Wayne Conrad'ın cevabı daha iyi ve daha net. – Josh

-1

Bu dağınık ama çalışıyor gibi görünüyor ...

food = "cheese" 
case food 
when (choice = "dip"): "carrot sticks" 
when (choice = "cheese"): "#{ choice } crackers" 
else 
    "mayo" 
end 
+0

' vaka gıda – johannes

8
#!/usr/bin/ruby1.8 

a = [1, 2, 3] 
case value = a.shift 
when 1 
    puts "one (#{value})" 
when 2 
    puts "two (#{value})" 
end 

# => one (1)