Составьте функцию, которая возвращает функцию, которая использует функцию внутри нее, с помощью Lodash - PullRequest
0 голосов
/ 31 января 2019

Просто я медленно знакомлюсь с FP, используя простой Lodash, для начала.

Я пытаюсь создать функцию isCode, которая будет возвращать true в следующих случаях:

const code = 'EAI_AGAIN'
const error = {code: 'EAI_AGAIN'}

isCode(code)(error)

В настоящее время это работает:

const getCode = partial(get, _, 'code')

const isCode = function(string) {
    return function(object) {
        return equal(string, getCode(object))
    }
}

и это:

const isCode = string => flow(getCode, partial(equal, string))

но мне интересно, как это будет выглядеть "на один уровень глубже" / "без очков (??искать было бы, и ни одно из "введений FP", которое я обнаружил, не было таким глубоким, как это - казалось бы.

Ответы [ 2 ]

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

Метод _.isEqual() ожидает два значения и не будет вызывать функции, поэтому, когда вы его каррируете, он сравнивает функцию со строкой и не пытается извлечь значение из объекта.

Оператор _.flow() является достаточно бессмысленным и более читабельным:

const isCode = string => flow(getCode, partial(equal, string))

Другим вариантом является частичное применение matchesProperty:

const { matchesProperty, partial } = _

const code = 'EAI_AGAIN'
const error = {code: 'EAI_AGAIN'}

const isCode = partial(matchesProperty, 'code')

const result = isCode(code)(error)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Вам также следует попробовать lodash / fp , поскольку в версии fp все методы каррированы, имеют фиксированную арность и являютсяв правильном порядке:

const { matchesProperty } = _

const code = 'EAI_AGAIN'
const error = {code: 'EAI_AGAIN'}

const isCode = matchesProperty('code')

const result = isCode(code)(error)

console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
0 голосов
/ 31 января 2019

Я не совсем уверен, почему вы хотите это сделать, но код может выглядеть примерно так:

function isCode(code){
  return function(error){
    if(code === error.code){
      return true;
    }
    return false;
  }
}
const code = 'EAI_AGAIN';
const error = {code: 'EAI_AGAIN'};
console.log(isCode(code)(error));
...