__应该仅适用于咖喱函数吗?为什么在这里工作?

时间:2019-09-11 14:39:20

标签: javascript node.js functional-programming ramda.js

我试图理解为什么__在这段代码中工作正常:

function editAddress (id, addressId, model) {
    return BusinessService
      .getById(id)
      .then(unless(
        () => checkUrlValue(addressId, model.id),
        rejectWithError(InvalidData.error('Invalid address data: Address id is different from request'))
      ))
      .then(pipe(
        updateModel(__, 'addresses', model, 'id', addressId),
        juxt([ always(id), identity ]),
        apply(BusinessService.editById)
      ))
      .then(pipe(
        prop('addresses'),
        find(propEq('id', addressId))
      ))
  }
function updateModel (entity, property, model, attr, id) {
  return evolve({
    [property]: pipe(
      juxt([
        findIndex(propEq(attr, id)),
        pipe(
          find(propEq(attr, id)),
          mergeLeft(model)
        ),
        identity
      ]),
      apply(update)
    )
  })(entity)
}

由于不调用名为(updateModel)的函数,为什么__在这种情况下仍然可以工作?

1 个答案:

答案 0 :(得分:2)

updateModel不会被管理,但是它会返回一个被称为evolve的函数的结果。第一个电话传入:

{
    [property]: pipe(
      juxt([
        findIndex(propEq(attr, id)),
        pipe(
          find(propEq(attr, id)),
          mergeLeft(model)
        ),
        identity
      ]),
      apply(update)
    )
}

然后使用entity调用此进化调用的结果,在您的情况下为__。如果不了解evolve的内幕,就不可能再进一步了解代码了。