2010-01-25 12 views
5

będę mieć dostęp ekspresję sprawozdań z przypadków w klauzuli następnie tjCzy istnieje sposób dostępu do wyrażenia z rubinowego oświadczenia?

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

czym w tym przypadku wyr będzie bieżąca wartość żywności. W tym przypadku wiem, że mogę po prostu uzyskać dostęp do zmiennej żywności, jednak mogą być przypadki, w których wartość nie jest już dostępna (array.shift itp ..). Innym niż przeniesienie expr out do zmiennej lokalnej, a następnie dostęp do niego, jest sposób na bezpośredni dostęp do wartości expr przypadkach?

Roja

p.s. Wiem, że ten konkretny przykład jest banalny, a jego przykład stanowi przykład.

Odpowiedz

3

Jak o:

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 myślę, że jest to w rzeczy samej "droga" wstyd, że kończy się przypisanie do globalnego: S Dużo doceniam podżeganie! –

+2

'x' tutaj może być zmienną dowolnego zakresu. Przypisuje się do globalnej tylko wtedy, gdy przypisujesz ją do globalnej. To wszystko w ruby, stan stanu sprawy zwraca wartość. Możesz po prostu i opcjonalnie uchwycić tę wartość w wybranej zmiennej. –

+3

Wydaje się to działać tylko wtedy, gdy używasz dopasowywania, a wynikiem meczu jest 1 USD. Jeśli nie używasz dopasowywania, odpowiedź Wayne'a Conrada jest lepsza i bardziej przejrzysta. – Josh

-1

To jest brudny, ale wydaje się, że to działa ...

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

'przypadku żywności = "sera"' – 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) 
Powiązane problemy