为什么我在 ramda 中收到“g.call 不是函数”错误?

问题描述 投票:0回答:1

所以我有一个问题,我在 ramda.js 中有两个函数,它们看起来像这样:

const getDayName = flip(nth)(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'])

const formatDay = ifElse(isNil, always(''), pipe(dec, getDayName, i18n.t('views.routing.dialogs.${__}')))

第一个函数通过索引返回当天的名称,第二个函数接受当天的 id,如果为 null,则返回空字符串,否则将 id 减 1,因为索引从 0 开始,id 从 1 开始。

然后通过管道传递给getDayName,返回日期名称,然后在i18n.t函数中使用日期名称,该函数用于以日期名称为键翻译日期

但是我有一个问题,当我使用这个函数时,我从 ramda 收到一个错误:g.call 不是一个函数,我认为这个错误来自管道中的

i18n.t()
,我该如何修复它?

我无法在管道中显式传递参数,例如

dayName => ...
,所以我应该只使用 ramda 中的
R.__
占位符

javascript ramda.js
1个回答
0
投票

R.pipe
需要函数,将
R.__
添加到模板字符串不会将其转换为函数。

创建一个包装

translate
i18n.t()
函数,并使用
dayName
:

调用它
const translate = dayName =>  i18n.t(`views.routing.dialogs.${dayName}`)

并在管道中使用它:

pipe(dec, getDayName, translate))
© www.soinside.com 2019 - 2024. All rights reserved.