Рамда, как передать параметр в функцию более высокого порядка? - PullRequest
0 голосов
/ 29 января 2019

Я изучаю функциональное программирование с здесь и сталкиваюсь с кодом ниже

const wasBornInCountry = person => person.birthCountry === OUR_COUNTRY
const wasNaturalized = person => Boolean(person.naturalizationDate)
const isOver18 = person => person.age >= 18

const isCitizen = person => wasBornInCountry(person) || wasNaturalized(person)

const isEligibleToVote = person => isOver18(person) && isCitizen(person)

, который можно сократить до

const isCitizen = either(wasBornInCountry, wasNaturalized)
const isEligibleToVote = both(isOver18, isCitizen)

Я могу 'Кажется, t понимает, как

const isCitizen = person => wasBornInCountry(person) || wasNaturalized(person)

можно перевести на:

const isCitizen = either(wasBornInCountry, wasNaturalized)

Как передать параметр person в wasBornInCountry и wasNaturalized?Что если я захочу позвонить isCitizen с двумя параметрами?Откуда мы знаем, какой параметр будет передан wasBornInCountry, а какой параметр wasNaturalized?

1 Ответ

0 голосов
/ 29 января 2019

Как передать параметр person в wasBornInCountry и wasNaturalized?

Нет.Функция, сгенерированная either делает.

Что если я хочу вызвать isCitizen с двумя параметрами?

Затем убедитесь, что каждая из двух функций, которые вы передаетеeither принимает два параметра.

const same = (x, y) => x == y;
const ten = (x, y) => x == 10 || y == 10;
const f = R.either(same, ten);
console.log([f(1, 1), f(2, 1), f(10, 3)])

Как мы узнаем, какой параметр будет передан wasBornInCountry и какой параметр wasNaturalized?

Идите и посмотрите на свой оригиналкод:

const isCitizen = person => wasBornInCountry(person) || wasNaturalized(person)
  • Параметр person передается wasBornInCountry
  • Параметр person передается wasNaturalized

Существует только один параметр.Он передается обеим функциям.

Если имеется несколько параметров, все они будут переданы обеим функциям.

...