2010-01-25 3 views
5

Je voudrais accéder aux déclarations de cas d'expression à partir d'une clause then à savoirY at-il un moyen d'accéder à l'expression à partir d'une déclaration de cas ruby?

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

où dans ce cas expr serait la valeur actuelle de la nourriture. Dans ce cas je sais, je pourrais simplement accéder à la variable de nourriture, cependant il peut y avoir des cas où la valeur n'est plus accessible (array.shift etc.). Autre que de déplacer l'expr dans une variable locale et y accéder, y a-t-il un moyen d'accéder directement à la valeur des cas expr?

Roja

p.s. Je sais que cet exemple spécifique est trivial c'est un exemple de scénario.

Répondre

3

Que diriez-vous:

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 je pense que cela est en effet la "voie" honte qu'elle finisse par être assignée à un global: S apprécie beaucoup l'incite! –

+2

'x' ici peut être une variable de n'importe quelle portée. Il affecte uniquement à un global si vous l'attribuez à un global. Tout cela dans ruby, l'état de l'état du cas renvoie une valeur. Vous capturez simplement et optionnellement cette valeur dans une variable de votre choix. –

+3

Cela ne semble fonctionner que si vous utilisez la correspondance, alors $ 1 est le résultat de la correspondance. Si vous n'utilisez pas de correspondance, la réponse de Wayne Conrad est meilleure et plus claire. – Josh

-1

Ceci est compliqué, mais semble que cela fonctionne ...

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

'cas nourriture = "fromage"' – 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) 
Questions connexes