2010-01-25 25 views
5

Tôi muốn truy cập vào biểu trường hợp báo cáo từ bên trong một điều khoản sau đó ví dụ:Có cách nào để truy cập biểu thức từ trong một tuyên bố trường hợp ruby ​​không?

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

nơi trong trường hợp này expr sẽ là giá trị hiện tại của thực phẩm. Trong trường hợp này tôi biết, tôi chỉ có thể truy cập vào thực phẩm biến, tuy nhiên có thể có trường hợp giá trị không còn truy cập được nữa (array.shift, vv ..). Khác với việc chuyển expr ra thành một biến cục bộ và sau đó truy cập nó, có cách nào để truy cập trực tiếp giá trị của các trường hợp expr không?

Roja

p.s. Tôi biết rằng ví dụ cụ thể này là tầm thường của nó một ví dụ kịch bản.

Trả lời

3

Làm thế nào về:

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 tôi đang nghĩ rằng đây là thực sự là "cách" xấu hổ nó kết thúc lên được giao cho một toàn cầu: S Nhiều đánh giá cao sự kích động! –

+2

'x' ở đây có thể là một biến của bất kỳ phạm vi nào. Nó chỉ gán cho toàn cục nếu bạn gán nó cho toàn cục. Tất cả mọi thứ trong ruby, trạng thái của trường hợp trả về một giá trị. Bạn chỉ đơn giản và tùy chọn nắm bắt giá trị đó trong một biến mà bạn chọn. –

+3

Điều này dường như chỉ hoạt động nếu bạn đang sử dụng kết hợp thì $ 1 là kết quả của trận đấu. Nếu bạn không sử dụng kết hợp thì câu trả lời của Wayne Conrad là tốt hơn và rõ ràng hơn. – Josh

-1

Đây là lộn xộn nhưng có vẻ như nó hoạt động ...

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

'trường hợp thức ăn = "pho mát" ' – 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) 
Các vấn đề liên quan