清理从属呼叫链

时间:2015-06-17 14:45:46

标签: ruby refactoring

如何使代码更清洁:

def some_public_method(arg)
  var1 = private_method(arg)
  var2 = private_method1(var1) if var1
  var3 = private_method2(var2) if var2
  var4 = private_method3(var3) if var3
  private_method4(var4) if var4
end

更新:抱歉,忘记更改方法名称

1 个答案:

答案 0 :(得分:1)

这是你可以做到的一种方式。

<强>代码

def some_public_method(private_methods, arg)
  private_methods.reduce(arg) { |x,m| x && send(m, x) }
end

private

def pm1(arg); arg+1; end
def pm2(arg); arg+2; end
def pm3(arg); arg+3; end

<强>实施例

private_methods = [:pm1, :pm2, :pm3]

some_public_method(private_methods, 0) #=> 6

def pm2(arg); nil; end
some_public_method(private_methods, 0) #=> nil