2016-03-17 72 views
0

我有一個方法如下:如何擺脫case語句的紅寶石

def something(param) 
    case param 
    when 1 
    break if <already executed for some similar data> 
    #Some code 
    when 2 
    #Some code 
    else 
    #Some code 
    end 
end 

如果param1,我將創建數據庫的記錄。在這種情況下,我需要檢查相同的數據是否已經存在,如果有的話,我需要打出when

當我嘗試break if <condition>,我得到這個錯誤:

Can't escape from eval with break 

作爲一個解決方案,case語句之前,我可以改變param的值,以便它(when 1)從未滿足條件:

def something(param) 
    param = 0 if <condition> 
    case param 
    when 1 
    . 
    . 

但我覺得它很醜。

break是用來擺脫循環,但我需要在這裏它的一個等價物,像switch語句break。

a = 1 
b = 1 

case a 
when 1 
    return if b == 1 
    p "Code Executed" 
end 

給我:

LocalJumpError: unexpected return 
+1

可能重複:http://stackoverflow.com/questions/8022865/how-to-break-out-of-a-case-while- in-ruby –

+0

@LucasNelson嘿,盧卡斯。感謝您指點這篇文章。但是,請你看看我的編輯。 – Abhi

+1

從答案中的評論,感覺就像你現在排序。 –

回答

2

如果這是你在方法體中有,那麼就去做return,而不是break

如果你不能做到這一點,那麼這樣做:

when 1 
    unless <already executed for some similar data> 
    #Some code 
    end 
when 2 
... 
+0

你可以看看我的編輯並指出錯誤 – Abhi

+1

@Abhi要使用'return',你必須在方法體內。在你的編輯中,它不在一個方法中,這就是爲什麼它拋出'LocalJumpError'。 – Babar

+0

糟糕,我的愚蠢的錯誤。謝謝 – Abhi