使用 Ramda 应用参数两次
Apply parameter twice with Ramda
基本上我需要的是用使用 Ramda 的无功能点方法替换这个 (x) => f(x)(x)
。
有办法吗?
在 Ramda 中,您可以使用 R.unnest
(在其他语言中通常是 join
)。虽然这通常用于展平嵌套列表,正如@ftor 的评论中所指出的,它也可以作用于函数的 Chain 实例。
unnest :: Chain c => c (c a) -> c a
-- when used with lists
unnest :: [[a]] -> [a]
-- when used with functions
unnest :: (r -> r -> a) -> (r -> a)
这是一个通过将 R.multiply
传递给 R.unnest
来生成给定数字平方的函数的示例:
const sq = R.unnest(R.multiply)
console.log(sq(5)) //=> 25
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
您也可以直接使用 chain
,结合 identity
。
const f = (x) => (y) => `f(${x})(${y})`
console.log(R.chain(f, R.identity)('x'))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
基本上我需要的是用使用 Ramda 的无功能点方法替换这个 (x) => f(x)(x)
。
有办法吗?
在 Ramda 中,您可以使用 R.unnest
(在其他语言中通常是 join
)。虽然这通常用于展平嵌套列表,正如@ftor 的评论中所指出的,它也可以作用于函数的 Chain 实例。
unnest :: Chain c => c (c a) -> c a
-- when used with lists
unnest :: [[a]] -> [a]
-- when used with functions
unnest :: (r -> r -> a) -> (r -> a)
这是一个通过将 R.multiply
传递给 R.unnest
来生成给定数字平方的函数的示例:
const sq = R.unnest(R.multiply)
console.log(sq(5)) //=> 25
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
您也可以直接使用 chain
,结合 identity
。
const f = (x) => (y) => `f(${x})(${y})`
console.log(R.chain(f, R.identity)('x'))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>