2010-01-25 15 views
5

quisiera acceder a la expresión declaraciones de casos dentro de un entonces cláusula es decir¿Hay alguna forma de acceder a la expresión desde dentro de una declaración de ruby?

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

donde en este caso expr sería el valor actual de los alimentos. En este caso, sé que podría simplemente acceder a la comida variable, sin embargo, puede haber casos en que el valor ya no sea accesible (cambio de matriz, etc.). Además de mover el expr a una variable local y luego acceder a él, ¿hay alguna forma de acceder directamente al valor de los casos expr?

Roja

p.s. Sé que este ejemplo específico es trivial, es un escenario de ejemplo harinoso.

Respuesta

3

¿Qué tal:

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 estoy pensando que esto es de hecho, la vergüenza del "camino" termina siendo asignada a un mundo global: S ¡Mucho aprecio la incitación! –

+2

'x' aquí puede ser una variable de cualquier alcance. Solo se asigna a un global si lo asignas a un global. Este todo en ruby, el estado del estado del caso devuelve un valor. Usted simplemente y opcionalmente captura ese valor en una variable de su elección. –

+3

Esto solo parece funcionar si está usando la coincidencia, entonces $ 1 es el resultado de la coincidencia. Si no usa el emparejamiento, la respuesta de Wayne Conrad es mejor y más clara. – Josh

-1

Ésta es desordenado, pero parece que funciona ...

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

'caso de alimentos = "queso"' – 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) 
Cuestiones relacionadas