С 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
. I.e., мы предоставляем 100, он возвращает true.
Но как это связано с множествами?
Что бы мы ни положили, оно возвращает true
. Где смысл этого?
Я понимаю, что мы можем предоставить нашу собственную реализацию/функцию реализации в качестве параметра, который будет представлять тот факт, что предоставленное значение находится внутри набора (или нет) - тогда (только) эта реализация делает функцию contains
заполненной некоторыми смысл/значение/логика/функциональные возможности.
Но пока это выглядит как бессмыслица. Он называется contains
, но имя не представляет логики. Мы могли бы назвать это apply()
, потому что это означает применить функцию (1-й аргумент) к значению (2-й аргумент). Имея только имя contains
, он может рассказать читателю, что автор может сказать. Может быть, это не слишком абстрактно?
Подумайте о 'x => true' как о наборе всех ints :) Помимо этого, помните, что тип Set, определенный здесь, больше предназначен для учебных целей, а не для производственного кода. – Shadowlands
Я пытаюсь .. :) Интересно, что чем больше scala я использую больше связанных с математикой вещей, в которые я призываю. Это может быть не так уж плохо. http://weknowmemes.com/wp-content/uploads/2012/02/coding-while-learning-it-at-college.jpg – ses