我有以下功能:
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 始终不同
是否可以重构它?
答案 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)
}
}
}