2016-03-17 41 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