2016-06-18 10 views
1

これはクロージャに関するものであるかどうかはわかりませんが、次のコードではeについては理由が分かりません。スカラの閉包について理解していますか?

type Set = Int => Boolean 

/* characteristic function of Set */ 
def contains(s: Set, elem: Int): Boolean = s(elem) 

/* definition of a singleton set, returning a set of only one given element */ 
def singletonSet(elem: Int): Set = e => e == elem 

上記のコードでは、eはどこから来たのですか?それについてどうすればいいのですか?

答えて

2

これは閉鎖に関するものではありません。 eは、Function1[Int, Bool]のエイリアスであるSetタイプの宣言によって決定されるタイプIntのエレメントを単純に表します。あなたが渡す将来のInt値のプレースホルダーとしてeと考えてください。これは単にanonymous function syntaxです。

println(contains(e => e == 1, 1)) 
:あなたが直接匿名関数を渡された場合

println(contains(singletonSet(1), 1)) // yields true 
println(contains(singletonSet(1), 2)) // yields false 

が同じで動作します:あなたはsingletonSetを呼び出すと

、あなたはeが反映されますIntパラメータを渡す必要があります

関連する問題