2) map(1) += 3 map.apply(1) += 3 (map.apply(1)).+=(3) 我不-6ren">
gpt4 book ai didi

scala - 为什么此代码有效 : "map.apply(1)+=3"

转载 作者:行者123 更新时间:2023-12-02 09:29:09 27 4
gpt4 key购买 nike

val map = scala.collection.mutable.Map(1 -> 2)

map(1) += 3
map.apply(1) += 3
(map.apply(1)).+=(3)

我不明白为什么代码都编译得很好。

在第一种情况下,我认为代码被扩展为 map(1) = map(1) + 3map.update(1, map(1) + 3)。但在第二种和第三种情况下,map.apply(1) = map.apply(1) + 3 会导致编译错误。

第二个和第三个代码如何扩展为?

最佳答案

从 scala 控制台运行 :replay -Xprint:typer:

1) map(1) += 3 扩展为:

map.update(1, map.apply(1).+(3))

2) map.apply(1) += 3 扩展为:

map.update(1, map.apply(1).+(3))

3) (map.apply(1)).+=(3) 扩展为:

map.update(1, map.apply(1).+(3))

编辑评论中问题的答案

If all three expansions are the same, why second and third causes a compilation error?

第二个和第三个:map.apply(1) += 3(map.apply(1)).+=(3)编译良好并且也等价。

我试图用我的答案证明的是:map.apply(1) += 3不会扩展到map.apply(1) = map.apply(1 ) + 3 正如 @som-snytt 在其答案的第一部分中所解释的。

顺便说一句 map(1) = map(1) + 3 扩展为 map.update(1, map(1) + 3) 如问题中所述。

我希望这能澄清我的答案。

关于scala - 为什么此代码有效 : "map.apply(1)+=3",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com