ruby - 如何从Ruby方法中删除多重 yield ?

标签 ruby class error-handling return refactoring

我有一个A类来处理错误,
我如何重构它以从调用方法中删除多个返回。

基本上,当if true然后从errorsuccess为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,因此将始终执行第一个return。因此,第一个return之后的所有内容都只是死代码,永远不会到达。您可以将call方法简化为此方法,它等于您的代码100%:

def call
  method1
end

或者

alias_method :call, :method1

由于不再从任何地方调用method2method3,因此只需删除它们即可。

由于method1仅从一个地方调用,即call,因此您可以内联它,因此整个类都变成这样:

class A
  def call
    {
      success: false 
      errors: 'X Not Found.'
    }
  end
end

这相当于您的代码100%,并且在所有情况下都做完全相同的事情。 (模通过无限制的反射违反封装。)

关于ruby - 如何从Ruby方法中删除多重 yield ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62382791/

相关文章:

javascript - jQuery ajax load() 的错误处理

powershell - 如何处理Powershell高级功能ErrorAction参数?

python - 结合 Python 和 Ruby 扩展模块

java - 覆盖java中不同类的方法

python - 如何将 functools.partial 用于类方法?

class - NodeJS 模块与类

sql-server - 在 TFS 中映射本地目录时发生数据库错误(SQL 错误 18054)

ruby-on-rails - 如何在 ruby​​ on Rails 中传递数据的 id 进行编辑?

ruby - 如何检查字符串是否包含 Ruby 中数组的一部分?

ruby-on-rails - 安装 rails 时出错,无法构建 gem native 扩展