a(i)とは何ですか?それはsingletonSet(element: Int)
という2つの方法の間には関係がありません。この特定の場合のa(i)
は、Int
からBoolean
までの関数である、a
という関数の呼び出しです。
a
はBoolean
からInt
から関数(スカラ構文糖とInt => Boolean
)用タイプエイリアスあるタイプSet
のです。このようなことの
思う:a
以来
def union(a: Int => Boolean, b: Int => Boolean): Int => Boolean = i => a(i) || b(i)
はタイプFunction1[Int, Boolean]
の関数であり、そのためb
があり、単にi
の渡された値を持つ関数を呼び出しているa(i)
を呼び出します。さて、どのような混乱することができることの表記されています。あなたはsingletonSet(2)(4)
を呼び出すとき、それは渡されるすべての将来Int
ためプレースホルダを自身が機能を返しunion
ので
i => a(i) || b(i)
必要があり、これは、起こります我々はそれを少しdesugarize場合、あなたが持っている:あなたが最初の呼び出しを行う際の方法の2つの段階呼び出しとして、それの
val intermidiateFunction: Int => Boolean = singletonSet(2)
val result: Boolean = intermidiateFunction(4)
と思いますが、あなたは別の関数バックを得るを呼び出して、2回目の呼び出し時にのみ生成された関数の結果を返します。
のはunion
を起動し、何が起こるか見てみましょう:
scala> union(i => i < 3, i => i > 1)
res6: Set = <function1>
scala> val result = union(i => i < 3, i => i > 1)
result: Set = <function1>
scala> result(1)
res7: Boolean = true
union
は、2つの機能に渡すために私たちを必要とするので、私たちはInt
が1より3よりも小さいか大きいかどうかを確認し、これらの簡素化関数を作成します最初の呼び出しの結果自体が関数です。 Int
を結果に渡すと、result(1)
のように1 < 3 || 1 > 1
になります。これはa(i) || b(i)
と等価です。a
が最初の関数で、b
が2番目の関数です。