関数 h と i を使用して関数 g を呼び出して引数を構築する、引数 a、b、および c を持つ特定の関数呼び出し f について、次のように言うことができます。
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がビルドになる場所):
def build(a: String)(b: String)(c: String) =
Message(convA(a)(b)(c), convB(a)(b)(c))
に (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))
それが実際に良いかどうかはわかりません。何かが足りないように感じます。