使用Ramda时出现'g.call is not a function'错误如何解决?
使用Ramda.js修复i18n.t调用导致的'g.call is not a function'错误
你的问题出在pipe中的i18n.t('views.routing.dialogs.${__}')写法:这行代码会立即执行i18n.t,传入的是包含${__}的普通字符串(Ramda的__占位符在这里不生效,因为它不在函数参数位置),而不是一个等待接收星期名称的函数。pipe的每一步都要求是可调用的函数,当执行到这一步时,它会把前一步的结果传给这个“函数”,但此时i18n.t已经执行完毕,返回的是翻译后的字符串(或非函数值),自然会抛出g.call is not a function错误。
修复方案(无显式参数,仅用Ramda工具)
利用Ramda的concat拼接翻译键前缀和星期名称,再传递给i18n.t,确保pipe的每一步都是函数:
const getDayName = flip(nth)(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']) const formatDay = ifElse( isNil, always(''), pipe( dec, getDayName, concat('views.routing.dialogs.'), // 拼接前缀与星期名称 i18n.t // 将完整键传给i18n.t做翻译 ) )
逻辑验证
- 传入有效星期ID(如
1):dec转为0→getDayName返回'monday'→concat生成'views.routing.dialogs.monday'→i18n.t用该键返回对应翻译文本。 - 传入
null/undefined:直接返回空字符串,符合需求。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

