【发布时间】:2015-12-23 01:31:55
【问题描述】:
我想更改我拥有的 Map 中某个键的值。除了如果我要求更新的密钥不存在,使用update 会给我一个错误之外,使用update 而不是set 有什么好处(如果有的话)?我发现set 更加简洁/干净。事实上,根据文档,人们可以(盲目地)争辩说set 实际上比update 更有效,因为set 不必为updater 函数执行get。
【问题讨论】:
我想更改我拥有的 Map 中某个键的值。除了如果我要求更新的密钥不存在,使用update 会给我一个错误之外,使用update 而不是set 有什么好处(如果有的话)?我发现set 更加简洁/干净。事实上,根据文档,人们可以(盲目地)争辩说set 实际上比update 更有效,因为set 不必为updater 函数执行get。
【问题讨论】:
update 在您的新值是当前值转换的结果时更强大:
const inc = (x) => (x + 1)
const m = Immutable.Map({a: 1, b: 2, c: 3})
m.update('b', inc) #=> {a: 1, b: 3, c: 3})
对比set:
m.set('b', inc(m.get('b'))
这个示例非常简单,但是当您开始围绕数据构建算法(如FP)而不是相反时,以这种方式对数据应用转换的模式变得更加普遍。我以前在game.update('player', moveLeft)之类的游戏中做过。
如果您知道新值是什么,那么只需使用set,因为update(key, x => val) 相当愚蠢。
【讨论】:
update 是否仍然是一种好习惯,或者set 是否可以。
@MatthewHerbst 说:
(...) 想知道使用 update 是否仍然是一种好习惯,或者 set 是否可以
在他对@andrew-marshall 回复的评论中
我不认为这是一个好坏习惯的问题。
据我了解,有两种不同的用例:
set
update
所以你我认为你不应该总是使用set 而不是update(或相反),我认为你应该根据你的用例使用一个或另一个
【讨论】: