ここでは、Scala currying vs partially applied functionsを見ましたが、そこでは、カレンダー処理、部分的なアプリケーション、およびScalaの通常の関数の間の機能的および意味的な違いについての回答があります。スカラのカレイド、部分的に適用された機能、および「通常の」機能の間のパフォーマンス特性は何ですか?
我々はベースとして正常な機能のパフォーマンスを使用している場合は、私は、つまり...
機能に使用することができ、これらの異なる技術間のいずれかのパフォーマンスの考慮事項があるかどうかを学ぶことに興味がある:
def add3(a: Int, b: Int, c: Int) = a + b + c
add3(1, 2, 3)
そしてと比較:
// 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)
私はいくつかのパフォーマンスの低いコードを認識している場合、私はに留意することがあります物事は何ですか(スピードやメモリ使用量の点で)、私はこのコードセグメントで多くのカリングや部分的なアプリケーションが発生しているのを見ていますか?
ハスケルでは、私は、例えば、何個のサンクが生成されているのか見ているでしょう。私はScalaが部分的に適用され、カルト化された関数を渡すのに似たような方法を使用していると考えていましたが、Scalaがこれらのことを処理する方法の詳細は知っておく価値があります。
私はこのことから集まることは、それはそれぞれの結果の機能を復帰させるためのシングルトンクラスを作成するため、カリー化と部分的にScalaで関数を適用するのオーバーヘッドは、ほとんど無視できるということです、量事実上の単純な関数呼び出しの大部分。 – josiah