使用Ramda进行部分应用程序参数操作

时间:2017-03-16 21:58:51

标签: functional-programming ramda.js

这显然不起作用 - 因为always不会像whenTrueValue那样在whenPropTrueAlways的顶级实现中调用export const whenPropEq = curry((key, predicateValue, whenTrueFn, data) => when( propEq(key, predicateValue), whenTrueFn, )(data), ); const whenPropTrueAlways = curry((key, whenTrueValue, data) => whenPropEq(key, true, always(whenTrueValue), data), ); // Doesn't work, for obvious reasons- just trying to illustrate the desire const whenPropTrueAlways = whenPropEq(__, true, always(__), __); 。有没有办法操纵调用另一种方法,就像我试图做的那样?将特定值替换为参数,以及将函数应用于另一个参数?

  computed: {
    uniquePosts: function() {
      var output = [];
      var keys   = [];

      this.posts.forEach(function (post) {
          var key = post[keyname];

          if (keys.indexOf(key) === -1) {
              keys.push(key);
              output.push(post);
          }
      });

      return output;
    }
  }

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

它不漂亮,但你可以这样写:

const whenPropTrue = useWith(flip(whenPropEq)(true), [identity, always, identity]);

useWith是一个比较不寻常的Ramda函数(以及它的姐妹函数converge。)它可以帮助一个人制作无点的东西,否则可能很难做到。但是,我经常发现,当难以让事情变得无分数时,这表明人们不应该这样做。