是否可以重构此scala代码

时间:2015-03-26 14:58:07

标签: scala refactoring

我有以下功能:

def firstFunctionMethod(contextTypeName: String): Parser[FunctionCallExpr] = namespace into {
    namespaceName =>
      function into {
        functionName =>
          functionExprParameters(contextTypeName) ~ opt(secondFunctionMethod(getFunctionReturnType(functionName).get)) ^^ {
            case args ~ subPath => FunctionCallExpr(namespaceName + functionName, args, subPath)
          }
      }
  }

可能的目标类具有10个具有完全相同代码的函数的问题。唯一的变化是 firstFunctionMethod secondFunctionMethod 始终不同

是否可以重构它?

1 个答案:

答案 0 :(得分:0)

下一个或类似的代码应该适合您。

  def firstFunctionMethod(contextTypeName: String): Parser[FunctionCallExpr] = firstFuncTemplate(contextTypeName, secondFunctionMethod)
  def firstFuncTemplate(contextTypeName: String, secFunc: TypeIn => TypeOut): Parser[FunctionCallExpr] = namespace into {
    namespaceName =>
      function into {
        functionName =>
          functionExprParameters(contextTypeName) ~ opt(secFunc(getFunctionReturnType(functionName).get)) ^^ {
            case args ~ subPath => FunctionCallExpr(namespaceName + functionName, args, subPath)
          }
      }
  }