这是一个新手问题(我对Ramda和函数式编程一般来说还是一个新手)。
我有一个带有两个参数的函数。为简单起见,我们假设它只是减去数字。我想翻转和讨论它的论点。我已经弄清楚如何手动完成它,但它真的感觉可以用管道或组合完成,我无法弄清楚如何。
import { curry, flip, pipe } from 'ramda';
const subtract = (a, b) => a - b; // subtract(1, 4); -3
const flippedCurriedSubtract = flip(curry(subtract))
// flippedCurriedSubtract(1)(4); 3
pipe(flip, curry, subtract)(1)(4); // NaN
你怎么用pipe
或compose
做到这一点?
编辑:
pipe(
curry,
flip
)(subtract); // works
pipe(flip, curry, subtract)(1)(4)
等于subtract(curry(flip(1)(4)))
同时定义flip
:
// flip :: (a -> b -> c) -> b -> a -> c
const flip = curry((fn, a, b) => fn(b, a));
这意味着qazxsw poi函数将接收一个qazxsw poi函数(a - > b - > c)作为参数,但现在它是一个数字然后导致错误。
flip
等于curry
,这将适合。它也与pipe(curry,flip)(subtract)
返回相同。 flip(curry(subtract))
和.compose(flip, curry)(subtract)
在方向执行功能方面是完全不同的。
而对于新手。我建议你阅读这个compose
据我所知,Ramda的大部分功能都已经过了。所以你不需要再次咖喱减去。
pipe
你可以ebook它,它仍将是curry:
subtract(5, 10); //=> -5
subtract(5)(10); //=> -5
我认为你根本不需要烟斗和咖喱,你可以这样做:
flip
斯科特在评论中指出,flip(subtract)(5, 10); //=> 5
flip(subtract)(5)(10); //=> 5
将自动讨论非咖喱功能:(非常有帮助)
const flippedSubtract = flip(subtract);
flippedSubtract(5)(10); //=> 5