gpt4 book ai didi

kotlin - 为什么kotlin中两个可变映射的总和是一个映射

转载 作者:行者123 更新时间:2023-12-02 16:18:31 24 4
gpt4 key购买 nike

我有两个返回可变映射的函数

fun mumapone() = mutableMapOf<String, Any>("one" to 1)
fun mumaptwo() = mutableMapOf<String, Any>("two" to 1) + mumapone()

fun mumaptwo() 的类型变成了 Map 而不是 MutableMap,为什么?似乎两个可变映射的总和将永远是一个 Map,这是为什么呢?

我也可以使用变量,但输出是一样的

    fun fakeConfig() = xx +  yy
val xx = mutableMapOf<String, Any>("one", 1)
val yy = mutableMapOf<String, Any>("two", 1)

fakeConfig() 的类型仍然是 Map,改变它的唯一方法是转换它或者

    (xx +  yy).toMutatleMap()

所以重复这个问题,为什么两个可变映射的总和变成一个映射而不是一个可变映射。

干杯,

最佳答案

一般来说,+ 用于返回新数据结构的不可变操作符。

您可以为 MutableMap 实现 + 运算符,但这不是一个好主意,因为 putAll()函数已经存在:

fun main() {
val foo = mutableMapOf(1 to "one", 2 to "two")
val bar = mapOf(3 to "three", 4 to "four")
foo.putAll(bar)
println(foo)
}

输出:

{1=one, 2=two, 3=three, 4=four}

最好使用 + 来获取新的不可变映射,或者显式使用可变操作,例如 putAll()

你可以这样写mumaptwo:

fun mumaptwo() = mumapone().putAll(mutableMapOf<String, Any>("two" to 1))

关于kotlin - 为什么kotlin中两个可变映射的总和是一个映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66100281/

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