Zajrzałem tutaj: Scala currying vs partially applied functions, ale tam odpowiedzi odpowiadają bardziej na temat funkcjonalnych i semantycznych różnic między funkcjami currying, partial application i normalnymi funkcjami Scali.Jakie są cechy wydajności między funkcjami curry, częściowo zastosowanymi i "normalnymi" w Scali?
jestem zainteresowany w nauce, czy istnieją względy wydajności między tymi różnymi technikami, które mogą być stosowane w tych funkcji, a mianowicie ...
Jeśli używamy wydajności normalnej funkcji jako podstawy:
def add3(a: Int, b: Int, c: Int) = a + b + c
add3(1, 2, 3)
a następnie porównać do:
// First
(add3 _).curried(1)(2)(3)
// Second
val add2 = add3(1, _: Int, _: Int)
val add1 = add2(2, _: Int)
add1(3)
// Third
def add3(a: Int)(b: Int)(c: Int) = a + b + c
add3(1)(2)(3)
Jakie są rzeczy, może chcę być świadomy jakbym zidentyfikowano pewne słabo wykonywania kodu (zarówno pod względem prędkości, jak i wykorzystania pamięci) i widzę wiele curry lub częściowe zastosowanie dzieje się w tym segmencie kodu?
W Haskell chciałbym na przykład sprawdzić, ile z nich generuje się i kręci. Przypuszczam, że Scala używa podobnego rodzaju metody przekazywania funkcji częściowo stosowanych i curry, a szczegóły, jak Scala radzi sobie z tymi rzeczami, byłyby cenne.
Co wnoszę z tego jest to, że narzut currying i częściowo stosowania funkcji w Scala jest głównie znikoma, ponieważ tworzy klas singleton dla powracających każdą funkcję wynik, którego kwota praktycznie do prostego wywołania funkcji w przeważającej części . – josiah