Есть ли способ получить доступ к выражению из оператора ruby? - PullRequest
5 голосов
/ 25 января 2010

Я хотел бы получить доступ к выражению операторов case из предложения then, т. Е.

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

где в этом случае expr будет текущая стоимость пищи. В этом случае, я знаю, я мог бы просто получить доступ к переменной food, однако могут быть случаи, когда значение больше не доступно (array.shift и т. Кроме перемещения expr в локальную переменную и последующего доступа к нему, есть ли способ прямого доступа к значению падежей expr

Roja

p.s. Я знаю, что этот конкретный пример тривиален, его пример сценарий.

Ответы [ 3 ]

8 голосов
/ 25 января 2010
#!/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)
3 голосов
/ 25 января 2010

Как насчет:

food = "cheese"

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

puts x  # => cheese crackers
0 голосов
/ 25 января 2010

Это грязно, но, похоже, работает ...

food = "cheese"
case food
when ( choice = "dip" ): "carrot sticks"
when (choice = "cheese" ): "#{ choice } crackers"
else
  "mayo"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...