如何在ruby中从方法中删除多重返回?
我有一个类如何在ruby中从方法中删除多重返回?,ruby,class,error-handling,return,refactoring,Ruby,Class,Error Handling,Return,Refactoring,我有一个类a来处理错误, 如何重构它以从调用方法中删除多个返回 基本上,当为true时然后从方法返回error和successfalse Class A def call return method1 if true/false return method2 if true/false return method3 if true/false { success: true } end private def method1 {
a
来处理错误,
如何重构它以从调用方法中删除多个返回
基本上,当为true时
然后从方法返回error
和success
false
Class A
def call
return method1 if true/false
return method2 if true/false
return method3 if true/false
{ success: true }
end
private
def method1
{
success: false
errors: 'X Not Found.'
}
end
def method2
{
success: false
errors: 'Y Not Found.'
}
end
def method3
{
success: false
errors: 'Z Not Found.'
}
end
end
由于
true
始终为true
,因此第一个条件将始终为true
,因此第一个返回将始终执行。因此,在第一次返回之后的所有内容都是死代码,永远无法到达。您可以将调用
方法简化为该方法,该方法100%等效于您的代码:
def调用
方法1
结束
或者,或者
alias_方法:调用,:方法1
由于不再从任何位置调用method2
和method3
,因此您可以将它们删除
由于method1
只从一个地方调用,即call
,因此您可以直接内联它,因此整个类变成:
A类
def呼叫
{
成功:错
错误:“未找到X。”
}
结束
结束
这100%等同于您的代码,并且在所有情况下都执行完全相同的操作。(通过无限制反射违反模的封装。)若您也可以添加条件代码,那个就好了,否则很难找到解决方案。无论如何,您可以有一个success?
和message
方法,并在class方法中格式化它
A类
def呼叫
{
成功:成功?
错误:消息
}.紧凑型
结束
私有的
def成功?
如果x | | y | | z
假的
其他的
真的
结束
结束
def消息
如果x
“你没找到。”
艾尔西夫
“你没找到。”
埃尔西夫z
“找不到Z。”
结束
结束
结束
请注意calls方法中的compact
,如果消息键为空(如果成功),它将删除消息键。它也可能为false。编辑问题。以使现有答案无效的方式编辑问题被认为是不礼貌的。请考虑恢复编辑。您可以使用A1,或者根据您的条件,一些<代码>如果ELSIF “显示”,您在示例中确定“代码> true /false ”吗?条件是什么?基于模型级条件。它有一组来自模型的返回true或false的方法。您是否正试图删除多个返回,因为有人告诉您,干净的代码应该只有一个返回?如果是这样,你就错了:是的。我会给他看这个。谢谢