对于给定的函数调用 f,带有参数 a、b 和 c,它使用函数 h 和 i 调用函数 g 来构建参数,我可以说:
f(a)(b)(c) = g( h(a)(b)(c), i(a)(b)(c) )
我知道我可以创建一个函数:
g'(h,i)(a)(b)(c) = g(h(a)(b)(c), i(a)(b)(c))
所以 f 可以是
f = g'(h,i)
因此应用 f(a)(b)(c) 将产生所需的结果。
我可以从(其中 f 变为 build )强制执行此操作:
def build(a: String)(b: String)(c: String) =
Message(convA(a)(b)(c), convB(a)(b)(c))
to(鉴于 h 和 i 作为参数并不重要,也许这就是断开连接的地方):
def gDash = {
a:String => b: String => c: String => Message(convA(a)(b)(c), convB(a)(b)(c))
}
def build = a:String => b:String => c:String => gDash(a,b,c)
但我仍然必须为 (a,b,c) 指定整个类型。但是我已经从应该更复杂和更脆弱的东西变成了更简单的东西,但实现实际上是一个更大的混乱!有没有办法简化这个不需要所有这些?
如果我对参数进行元组化,以便:
def gDash = implicit composite:(String,String,String) => Message(convA, convB)
def convA(composite: s) => ...
def convB(composite: s) => ...
def f(a: String)(b: String)(c: String) = gDash((a,b,c))
我不确定这实际上更好,我觉得我错过了一些东西。