有没有办法从ruby case语句中访问表达式?

Roj*_*uck 5 ruby case

我想从then子句中访问case语句表达式,即

food = "cheese"
case food
when "dip" then "carrot sticks"
when "cheese" then "#{expr} crackers"
else
  "mayo"
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,expr将是食物的当前值.在这种情况下,我知道,我可以简单地访问变量食物,但是可能存在值不再可访问的情况(array.shift等..).除了将expr移到局部变量然后访问它之外,还有一种方法可以直接访问案例expr的值吗?

罗亚

ps我知道这个具体的例子很简单,它只是一个例子.

Way*_*rad 9

#!/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)
Run Code Online (Sandbox Code Playgroud)


dra*_*tun 3

怎么样:

food = "cheese"

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

puts x  # => cheese crackers
Run Code Online (Sandbox Code Playgroud)

  • 这似乎仅在您使用匹配时才有效,然后 $1 是匹配的结果。如果您不使用匹配,那么韦恩·康拉德的答案会更好、更清晰。 (3认同)
  • 这里的“x”可以是任何范围的变量。仅当您将其分配给全局时,它才会分配给全局。这就是 ruby​​ 中的一切,case state 状态返回一个值。您只需选择在您选择的变量中捕获该值即可。 (2认同)