Javascript Ramda中的嵌套占位符

Javascript Ramda中的嵌套占位符,javascript,ramda.js,Javascript,Ramda.js,我试图将一个函数传递到一个过滤器中,这个过滤器本身嵌套在更深层的函数中 从概念上讲,类似以下(断开的)示例: 正确的方法是什么 为了说明这一点,这个硬编码的替代方案确实起到了预期的作用: const cleanEmpties = R.when( R.either(R.is(Array), R.is(Object)), R.pipe( R.map(a => cleanEmpties(a)), R.filter(myFilter) ) )

我试图将一个函数传递到一个过滤器中,这个过滤器本身嵌套在更深层的函数中

从概念上讲,类似以下(断开的)示例:

正确的方法是什么

为了说明这一点,这个硬编码的替代方案确实起到了预期的作用:

const cleanEmpties = R.when(
    R.either(R.is(Array), R.is(Object)),
    R.pipe(
        R.map(a => cleanEmpties(a)),
        R.filter(myFilter)
    )
)

cleanEmpties(testData); //working, does not include `bar`

问题在于当在同一函数中多次引用时,如何解释
R.u
。如果您没有传递足够的参数,curried函数将返回一个期望更多参数来填补空白的函数

R.gt(4,3) // true
R.gt(R.__, R.__)(4, 3) //true
R.gt(R.__, R.__)(4)(3) //true
R.gt(R.__, R.__)(4) // function n(r){return 0===arguments.length||b(r)?n:t.apply(this,arguments)}
如果更改函数语法以接受显式参数,代码将按预期工作:

const clean = f => R.when(
  R.either(R.is(Array), R.is(Object)),
  R.pipe(
    R.map(a => clean(f)(a)),
    R.filter(f)
  )
);
const clean = f => R.when(
  R.either(R.is(Array), R.is(Object)),
  R.pipe(
    R.map(a => clean(f)(a)),
    R.filter(f)
  )
);