Я работаю над заданиями на курсе Scala Coursera и задаю вопрос. Из любопытства я переключился из анонимной функции к определенному одному:аргументы в необычность функции высшего порядка в scala
object sets {
def main(args:Array[String]) {
type Set = Int => Boolean
def contains(s: Set, elem: Int): Boolean = {println("in contains elem ="+elem);s(elem)}
def singletonSet(elem: Int): Set = { //println("in singleton elem ="+elem); (x: Int) => x == elem}
def singletonSetF(x: Int): Boolean = {
println ("in singleton elem ="+elem+", x="+x)
elem == x
}
singletonSetF
}
println(contains(singletonSet(69), 6))
}
}
А вот выход:
в содержишь эль = 6
в одноплодном эле = 69, х = 6
ложные
Я считаю, что код правильно и работает правильно. Мой вопрос в том, как и почему аргумент «elem = 6» передается из метода contains, присваивается значение «x = 6» в методе singletonSetF? Является ли функция contains «s (elem)» вызовом singletonSetF, а не singletonSet?
Спасибо за ваш ответ. Два использования elem были путаными, благодаря моей рабской резке и вставке оригинальных заданий. Википедия о закрытии - еще один хороший ресурс с интересными и практичными примерами. –