2016-06-18 54 views
1

我甚至不確定這是關於關閉,但我不能在以下代碼中推斷e理解scala中的閉包?

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僅代表Int類型的元素,如Set類型的聲明所指示的那樣,該類型是Function1[Int, Bool]的別名。將e視爲未來Int值的佔位符,您將通過該值。這簡直就是anonymous function syntax

當你調用singletonSet,你必須通過Int參數,e將反映:

println(contains(e => e == 1, 1)) 

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

,如果你直接傳遞一個匿名函數同樣會工作