理解scala中的闭包?

时间:2016-06-18 22:02:38

标签: scala closures

我甚至不确定这是关于闭包的,但我无法在下面的代码中推断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来自何处?我该怎么推理呢?

1 个答案:

答案 0 :(得分:2)

这不是关闭。 e只是代表Int类型的元素,由Set类型的声明决定,Function1[Int, Bool]类型是e的别名。将Int视为未来singletonSet值的占位符,您将通过这些值。这只是anonymous function syntax

当您致电Int时,您必须传递e将反映的println(contains(singletonSet(1), 1)) // yields true println(contains(singletonSet(1), 2)) // yields false 参数:

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

如果您直接传递匿名函数,那么同样适用:

{{1}}