我已经使用了相当长的一段时间,但我仍在努力理解this example from the Ramda docs是如何工作的:

const greet = R.replace('{name}', R.__, 'Hello, {name}!');
greet('Alice'); //=> 'Hello, Alice!'

如何识别{name}个变量/匹配,然后将其插入Hello, {name}字符串?这是Ramda的特写吗?一个JavaScript小把戏?我以前从未见过这种模式.

我判断了Ramda replace的源代码,但什么都没有找到.

推荐答案

{name}replace没有什么特别的.R.__创建一个部分应用的函数,其中该位置中的参数稍后被提供.

把它写成这样也许会有帮助-

const greet = R.replace('{name}', R.__, 'Hello, {name}!');

const greet = function(replacement) {
  return R.replace('{name}', replacement, 'Hello, {name}!')
}

你可以看到它在没有R.replace功能的情况下工作-

const stringReplace = R.curry((pattern, replacement, s) =>
  s.replace(pattern, replacement) // String.prototype.replace
)

const greet = stringReplace("***", R.__, "hello ***")
console.log(greet("world")) // hello world
console.log(greet("earth")) // hello earth

R.__的"魔力"之所以成为可能,是因为Ramda库中的每个函数及其curry个帮助器都是curried.Curry函数在最终应用之前等待它的所有参数,R.__允许您在位置外应用参数.

Javascript相关问答推荐

Math.random超出了最大调用堆栈

在Phaser中查找哪个物体处于碰撞中

响应式JS DataTable中的Bootstrap 5弹出程序无法正常工作

在JavaScript中打开和关闭弹出窗口

React Hooks中useState的同步问题

提交表格后保留Web表格中的收件箱值?

. NET中Unix时间转换为日期时间的奇怪行为

Redux查询多个数据库Api reducerPath&

如何在angular中从JSON值添加动态路由保护?

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

使用ThreeJ渲染的形状具有抖动/模糊的边缘

这个值总是返回未定义的-Reaction

在Java中寻找三次Bezier曲线上的点及其Angular

如何 for each 输入动态设置输入变更值

如果一个字符串前面有点、空格或无字符串,后面有空格、连字符或无字符串,则匹配正则表达式

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

处理app.param()中的多个参数

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

Next.js无法从外部本地主机获取图像