Из курса FP:
type Set = Int => Boolean // Predicate
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set, elem: Int): Boolean = s(elem)
Почему это имеет смысл?
assert(contains(x => true, 100))
По сути, он передает значение 100
функции x => true
. То есть, мы предоставляем 100, он возвращает true.
Но как это связано с множествами?
Что бы мы ни поставили, оно возвращает true
. Где в этом смысл?
Я понимаю, что мы можем предоставить нашу собственную реализацию/функцию набора в качестве параметра, который будет представлять тот факт, что предоставленное значение находится внутри набора (или нет) - тогда (только) эта реализация делает функцию contains
заполненной некоторым смыслом/значением/ логика/функциональность.
Но пока это выглядит как бессмысленная функция. Он называется contains
, но это имя не отражает логики. Мы могли бы назвать его apply()
, потому что он применяет функцию (1-й аргумент) к значению (2-й аргумент). Наличие только имени contains
может сказать читателю то, что хотел бы сказать автор. Не слишком ли это абстрактно?
x => true
как о наборе всех целых чисел :) Кроме того, помните, что определяемый здесь тип Set больше предназначен для учебных целей, а не для производственного кода. - person Shadowlands   schedule 25.09.2013