使用Ramda镜头为指定对象设置结构值



给定这个镜头:

const obj = {
foo: ['bar', 'qux']
}
const foo0Lens = R.lensPath(['foo', 0]);

R.setfoo第一个元素设置为变量对象上的指定值:

R.set(foo0Lens, 'baz')(obj);

虽然我需要一个将指定对象上的第一个元素设置为变量值foo函数:

const setObjFoo0 = R.flip(R.set(foo0Lens))(obj);    
setObjFoo0('baz');

R.flip可以完成这项工作,但参数慢跑使代码的表现力降低。

这是应该做的吗?我错过了关于Ramda镜头的一些东西吗?还有其他方法可以方便地使用镜头创建setObjFoo0吗?

嗯,这可能更干净:

const setObjFoo0 = R.set(foo0Lens, R.__, obj)

当不使用R.前缀时,在我看来读起来更好:

const setObjFoo0 = set(foo0Lens, __, obj)

那里的占位符看起来像一个占位符。

关于从Ramda中删除占位符的讨论零星(免责声明:我是作者之一(,但似乎没有什么迫在眉睫。 像这样的例子有助于证明它有时使用起来要干净得多。

最新更新