2011-11-05 16 views
13

Vì vậy, tôi đã thử break, nextreturn. Tất cả đều cung cấp lỗi, exit tất nhiên hoạt động, nhưng rằng hoàn toàn lần thoát. Vì vậy, làm thế nào sẽ kết thúc một case...when "quá sớm?"Cách "ngắt" trong một trường hợp ... khi đang ở trong Ruby

Ví dụ:

case x 
    when y; begin 
     <code here> 
     < ** terminate somehow ** > if something 
     <more code> 
    end 
end 

(Trên đây là một số hình thức pseudo-code chỉ để cung cấp cho các ý tưởng chung của những gì tôi đang hỏi [bắt đầu ... cuối được sử dụng với hy vọng rằng sẽ làm việc break .?]

Và, trong khi tôi đang ở đó, là có một hơn nhã cách đi qua khối để case...when

+0

chỉ cần cấu trúc lại logic của bạn - xem bên dưới – Tilo

Trả lời

7

có gì sai với:

case x 
when y; 
    <code here> 
    if !something 
     <more code> 
    end 
end 

Lưu ý rằng if !something cũng giống như unless something

+0

Hoàn toàn không có gì! Nó đã vượt qua tâm trí của tôi, nhưng tôi đang tìm cách để làm điều đó. Tôi cho rằng có một cách đúng đắn, ngoài việc này. Vì vậy, nếu không có cách nào khác để làm điều đó, tôi đoán _this_ là đúng cách. Cảm ơn! : D – omninonsense

+0

Sai là thụt đầu dòng. Nếu nó không sai, thì ngôn ngữ sẽ không cần gì cả, không phải là 'break' hay' next'. – Nakilon

4

tôi nhìn thấy một vài giải pháp khả thi. Tại tay đầu tiên, bạn có thể xác định khối bạn các hướng dẫn bên trong một số phương pháp:

def test_method 
    <code here> 
    return if something 
    <more code> 
end 

case x 
    when y 
    test_method 
end 

Tại Mặt khác, bạn có thể sử dụng catch-throw, nhưng tôi tin rằng nó xấu xí hơn và cách phi ruby ​​:)

catch :exit do 
    case x 
    when y 
     begin 
     <code here> 
     throw :exit if something 
     <more code> 
     end 
    end 
end 
+0

Vâng, nếu tôi tạo ra một phương pháp cho mọi trường hợp nó sẽ trông kỳ lạ, thực sự kỳ lạ (và có rất nhiều trường hợp) và ví dụ thứ hai _does_ nhìn một chút ... Eh. 1 cho sự sáng tạo, mặc dù. – omninonsense

+0

nhưng chờ đợi, trở lại đó chỉ trả về từ phương thức và không phá vỡ tuyên bố trường hợp, phải không? –

3

Dưới đây là một câu trả lời tương tự như kỹ thuật WarHog cho:

case x 
when y 
    begin 
     <code here> 
     break if something 
     <more code> 
    end while false 
end 

hoặc nếu bạn thích:

case x 
when y 
    1.times do 
     <code here> 
     break if something 
     <more code> 
    end 
end