【发布时间】:2018-01-09 09:28:02
【问题描述】:
背景
我正在尝试使用 Ramda 编写 2 个函数,但我遇到了 pipe 的问题,这意味着我不知道如何使用它。
代码
假设我有一个返回数组的函数:
var createQuery = params => [ getSQLQuery( params ), [ getMarket() ] ];
var getSQLQuery = ( { lang } ) => `My query is ${lang}`;
var getMarket = () => "en_en"
所以,当调用createQuery({ lang: "es" }) 时,我会得到以下输出:[ "My query is es", ["en_en"] ];
现在,让我们也假设我是一个讨厌的男孩,我想挖掘这些重要信息!
R.tap(console.log, createQuery({lang: "es"}))
一个组合(确切地说是一个管道)将是:
R.pipe(
createQuery( {lang: "en"} ),
R.tap(console.log)
);
返回一个函数。
问题
现在假设我要执行所述功能:
var comp = params => R.pipe(
createQuery( params ),
R.tap(console.log)
)(params);
comp({lang: "uk"}); //Blows Up!?
为什么我的函数会被f.apply is not a function 炸毁??
我做错了什么?
【问题讨论】:
-
问题是您没有类型检查器来告诉您(部分应用的函数的)中间类型有什么问题。
-
我很困惑。我看不出这是一个可能来自类型检查的错误。
-
ftor,好被动好斗的哈哈
标签: javascript functional-programming ramda.js