【问题标题】:How i can compose that function with ramda?我如何用 ramda 编写该函数?
【发布时间】:2019-08-19 06:40:14
【问题描述】:

如何以 ramda 方式创建 addGreeting 函数?

我尝试创建一个函数,但它认为这不是最佳解决方案。

const animal = {};

const addName = R.assoc('name');

const addGreeting = (transformString) => (animal) => {
  return R.assoc('greeting', transformString(animal), animal);
};

const createAnimal = 
 R.pipe(
   addName('Igor'),
   addGreeting(animal => `Hello ${animal.name}`),
 );

createAnimal(animal);

我希望用 ramda 编写 addGreeting 函数。


UPD:我的解决方案

const addName = R.assoc('name');

const addGreeting = 
  (transformString) => 
    R.converge(
      R.merge,
      [
        R.applySpec({
          greeting: transformString
        }),
        R.defaultTo({})
      ]
    )

const createAnimal = 
 R.pipe(
   addName('Igor'),
   addGreeting(animal => `Hello ${animal.name}`),
 );

createAnimal({});

【问题讨论】:

    标签: javascript functional-programming ramda.js


    【解决方案1】:

    您可以使用R.curry创建addGreetingR.applySpec创建动物创建功能:

    const { curry, applySpec, identity } = R
    
    const addGreeting = curry((transformString, name) => transformString(name));
    
    const createAnimal = applySpec({
      name: identity,
      greeting: addGreeting(name => `Hello ${name}`)
    })
    
    console.log(createAnimal('Igor'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2017-08-19
      • 2017-09-12
      • 1970-01-01
      相关资源
      最近更新 更多