Javascript 在拉姆达给一个Arg打了两次电话
我正在使用Ramda构建一个简单的应用程序 我遇到了一个函数组合问题,我真的不知道如何在不创建看似不必要的荒谬函数的情况下解决这个问题 情景: 我有一个对象作为参数传递。此对象上有两个属性,以及一些与问题无关的其他内容,但我不想更改其状态:Javascript 在拉姆达给一个Arg打了两次电话,javascript,ramda.js,Javascript,Ramda.js,我正在使用Ramda构建一个简单的应用程序 我遇到了一个函数组合问题,我真的不知道如何在不创建看似不必要的荒谬函数的情况下解决这个问题 情景: 我有一个对象作为参数传递。此对象上有两个属性,以及一些与问题无关的其他内容,但我不想更改其状态: {locCode :<string>, LocationList : [<Location>], someOtherParams : ... } 我写这篇文章的目的似乎非常荒谬,让我相信我犯了可怕的错误: const locLi
{locCode :<string>, LocationList : [<Location>], someOtherParams : ... }
我写这篇文章的目的似乎非常荒谬,让我相信我犯了可怕的错误:
const locListLens = R.lens(R.prop('LocationList'),R.assoc('LocationList'))
const appendLocList = (i)=>R.compose(R.over(locListLens),R.append,fetchLocByCode,R.prop('locCode'))(i)(i)
这个解决方案“有效”,但似乎我错过了一些基本的想法
有谁愿意提出一种更“规范”的方法来解决这个问题吗?让我们从您的初始版本开始:
Param => {
Param.LocationList.push(fetchLocByCode(Param.locCode));
return Param;
}
我非常希望这种突变不是必需的。让我们删除它:
Param =>
R.assoc('LocationList',
R.append(fetchLocByCode(Param.locCode), Param.LocationList),
Param)
我们可以使用镜头避免两次访问LocationList
属性:
Param =>
R.over(R.lensProp('LocationList'),
R.append(fetchLocByCode(Param.locCode)),
Param)
我们能完全摆脱Param
吗?让我们首先使用:
让我们使用从第一个分支函数中删除Param
:
R.converge(R.over(R.lensProp('LocationList')),
[R.compose(R.append, fetchLocByCode, R.prop('locCode')),
R.identity])
每当你发现自己在写R.converge(f[g,R.identity])
的时候,你就发现了组合器的用途
S.S(R.flip(R.over(R.lensProp('LocationList'))),
R.compose(R.append, fetchLocByCode, R.prop('locCode')))
虽然这很简洁,但我认为
R.assoc
版本很好。未来的读者不会喜欢理解S.S(R.flip(R.over)(R.lensProp
)让我们从您的初始版本开始:
Param => {
Param.LocationList.push(fetchLocByCode(Param.locCode));
return Param;
}
我非常希望突变不是必需的。让我们删除它:
Param =>
R.assoc('LocationList',
R.append(fetchLocByCode(Param.locCode), Param.LocationList),
Param)
我们可以使用镜头避免两次访问LocationList
属性:
Param =>
R.over(R.lensProp('LocationList'),
R.append(fetchLocByCode(Param.locCode)),
Param)
我们能否完全摆脱Param
?让我们从使用以下命令开始:
让我们使用从第一个分支函数中删除Param
:
R.converge(R.over(R.lensProp('LocationList')),
[R.compose(R.append, fetchLocByCode, R.prop('locCode')),
R.identity])
每当你发现自己在写R.converge(f[g,R.identity])
的时候,你就发现了组合器的用途
S.S(R.flip(R.over(R.lensProp('LocationList'))),
R.compose(R.append, fetchLocByCode, R.prop('locCode')))
虽然这很简洁,但我认为
R.assoc
版本很好。未来的读者不会喜欢理解S.S(R.flip(R.over)(R.lensProp
)谢谢!你的例子让这变得更有意义-我真的很迷茫,试图保持“无点”,却忘记了直接访问一处房产仍然是完全可能的。谢谢!你的例子让这变得更有意义-我真的很迷茫,试图保持“无点”,却忘记了它仍然是完全可以的可以直接访问属性。