Извините, но ваш пример, кажется, не относятся к частичному применению, по крайней мере, для меня.
Вы просто используете синтаксис ярлыков для определения регулярных функций.
На самом деле gt
, ge
... определения разлагаются на что-то очень, как
val gt: IntPairPred = (x: Int, y: Int) => x > y
val gt: IntPairPred = (x: Int, y: Int) => x >= y
//and so on...
Regular модификации функции поддержки своих аргументов, но это не то, что вы ищете, я полагаю.
Чтобы определить замыкание, вы должны определить частичную функцию, ссылающийся на переменную во внешней области видимости, как
var one = 1
val gt1 = gt(1, _: Int)
assert(gt1(0)) //ok
assert(!gt1(1)) //ok
one = 2 //weirdo!
assert(gt1(0)) //ok
assert(gt1(1)) //ok
assert(!gt1(2)) //ok
Так что дело не в определении функций или частичного применения. Дело в том, что во время определения вы используете переменные из области закрытия внутри вашей функции. В этом случае на вашу функцию влияет переменная, которую вы закрыли.
Это вы, что искали?
Не могли бы вы проверить это довольно легко в repl? – KChaloux
«Закрытие» - это еще одно слово для «Лямбда», это то же самое. –
@ ElectricCoffee - это выражение лямбда, которое всегда позволяет использовать переменные за пределами своего собственного списка параметров? В противном случае я бы сказал, что это не то же самое, что закрытие. –