Bu soruyu öğrenirken çok fazla soruyordum ve o zamandan beri birçok kez soruldum. Farkı tanımlamanın en basit yolu, her ikisinin de aynı olmasıdır :) Açıklayayım ... Açıkçası farklılıklar var.
Hem kısmi uygulama hem de körelme, bir işleve argümanların verilmesini içerir, belki de bir anda değil. Oldukça kanonik bir örnek iki sayı eklemektir. Sahte kodda (aslında anahtar kelimeler olmadan JS), temel işlev aşağıdaki olabilir:
add = (x, y) => x + y
Bir "addOne" işlevi istedim, kısmen uygulayabilir veya köri olabilir:
addOneC = curry(add, 1)
addOneP = partial(add, 1)
Şimdi bunları kullanmak açık:
addOneC(2) #=> 3
addOneP(2) #=> 3
Peki fark nedir? İnce, ancak kısmi uygulama bazı argümanlar sağlamayı içerir ve döndürülen işlev daha sonra bir sonraki çağrışımda ana işlevi yürütür, oysa köri gerekli tüm argümanlara sahip olana kadar beklemeye devam eder:
curriedAdd = curry(add) # notice, no args are provided
addOne = curriedAdd(1) # returns a function that can be used to provide the last argument
addOne(2) #=> returns 3, as we want
partialAdd = partial(add) # no args provided, but this still returns a function
addOne = partialAdd(1) # oops! can only use a partially applied function once, so now we're trying to add one to an undefined value (no second argument), and we get an error
Kısacası, bazı değerleri önceden doldurmak için kısmi uygulamayı kullanın, yöntemi bir sonraki çağırışınızda, yürütülür ve tanımlanmamış tüm bağımsız değişkenler bırakılır; işlev imzasını yerine getirmek için sürekli olarak kısmen uygulanmış bir işlevi gerektiği kadar döndürmek istediğinizde curried kullanın. Son bir örnek:
curriedAdd = curry(add)
curriedAdd()()()()()(1)(2) # ugly and dumb, but it works
partialAdd = partial(add)
partialAdd()()()()()(1)(2) # second invocation of those 7 calls fires it off with undefined parameters
Bu yardımcı olur umarım!
GÜNCELLEME: Bazı diller veya lib uygulamaları, iki tanımımı kafa karıştırıcı bir karmaşaya dönüştürebilecek kısmi uygulama uygulamasına bir pasiflik (son değerlendirmede toplam argüman sayısı) geçirmenize izin verecektir ... ancak bu noktada, iki teknik büyük ölçüde değiştirilebilir.