如果我想定义一个函数来过滤匹配给定值的集合,我可以这样写:
const { filter, equals} = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = x => filter(equals(x), data);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
我想我也可以这样写:
const { filter, equals, __ } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = filter(equals(__), data)
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
但显然不是;在第二个示例中,filterDataFor
不是函数。有人可以指出我哪里出了问题吗?
最佳答案
你可以做的是在 filter
中放置一个简单的占位符而不是 equals(__)
,然后简单地 compose
它们和 equals :
const { filter, equals, __, compose } = R
const data = [1, 2, 3, 4, 5]
const filterDataFor = compose(filter(__, data), equals);
console.log(filterDataFor(2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
由于 compose
从右到左组合函数,当您调用 filterDataFor(2)
时,它将首先计算 equals(2)
然后结果函数将被应用而不是占位符,本质上导致 filter(equals(2), data)
。
关于javascript - 在函数中间注入(inject)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745131/