管内部无点部分应用?

时间:2017-10-27 17:53:58

标签: functional-programming ramda.js

我无法绕过我能达到的方法,以使下面的代码点免费。以下工作,但需要看似不必要的中间状态变量。

import { pipe, curryN, __, prop } from 'Ramda'
import ns from 'ns' 

// For the sake of this, let's say `ns.foo` is just `console.log` 
// (it can take any number of args)

const bar = pipe(
  prop('foo'),
  curryN(3),
  (x) => x(__, 'b', __),
  Promise.promisify, // or something
)(ns)

bar('a', 'c')
// => 'a b c' 

Here's a contrived version on the Ramda repl

2 个答案:

答案 0 :(得分:1)

(x) => x(__, 'b', __)转换为无点形式的一种方法是使用R.apply的翻转实例,部分应用参数列表。

R.flip(R.apply)([R.__, 'b'])

但是,与原始匿名函数相比,我觉得这开始失去可读性,因此在寻找无点解决方案时请始终牢记这一点。

答案 1 :(得分:0)

也许我只是感到困惑,但这看起来像一个简单的curry foo左右:

const foo = curry(function(a, b, c) {
  console.log(a, b, c)
})

const bar = foo(__, 'b')