2010-01-25 16 views
5

我想一个然后子句中从访问case语句表达即有什么办法从ruby case语句中访问表达式吗?

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

其中在这种情况下EXPR将食物的当前值。在这种情况下,我知道,我可以简单地访问变量食物,但可能会出现数值无法访问的情况(array.shift等)。除了将expr移出一个局部变量然后访问它,有没有办法直接访问expr的例子的值?

Roja

p.s.我知道这个具体的例子并不重要,它只是一个例子场景。

回答

3

如何:

food = "cheese" 

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

puts x # => cheese crackers 
+0

嗯,我在想,这是事实上,这种“方式”的耻辱最终被分配到了全球:S非常欣赏这种煽动! – 2010-01-27 13:47:51

+2

'x'在这里可以是任何范围的变量。如果将其分配给全局,它只会分配给全局。这一切都在ruby中,case状态返回一个值。您只需简单地将该值捕获到您选择的变量中。 – 2010-02-10 17:16:54

+3

这似乎只适用于如果您使用匹配,那么$ 1是匹配的结果。如果你没有使用匹配,那么韦恩康拉德的答案更好,更清晰。 – Josh 2012-04-20 03:13:48

-1

这是混乱的,但好像它的工作原理...

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

'情况下食物= “奶酪”' – johannes 2010-01-25 15:41:09

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) 
相关问题