gpt4 book ai didi

arrays - Kotlin - 向空数组添加值

转载 作者:行者123 更新时间:2023-12-01 23:03:08 26 4
gpt4 key购买 nike

我正在学习 kotlin 概念,在学习数组主题时遇到以下问题。

我创建了一个空的

val empty = arrayOf<Int>()
empty[0] = 2

所以上面的代码将失败并导致 ArrayIndexOutOfBoundsException,这是有道理的,因为数组的大小无法更改,并且由于数组初始化时没有大小,因此它被视为空数组。

这是我认为这变得有趣的地方

var emptyArray = arrayOf<Int>()
emptyArray += 1
emptyArray += 2

上面的代码没有失败,当我打印项目时,我得到了结果。我假设在尝试将元素添加到索引而不是直接添加时发生了一些事情,但我找不到任何文档来解释幕后发生的事情。有人可以解释一下

最佳答案

这是因为 Kotlin 的扩充赋值运算符是 overloaded .

For the assignment operations, for example a += b, the compiler performs the following steps:

  • If the function from the right column is available:
    • [...]
  • Otherwise, try to generate code for a = a + b (this includes a type check: the type of a + b must be a subtype of a).

“右列的函数”指的是我没有包含在引用中的表格的右列,它们基本上是运算符函数plusAssign , minusAssign , timesAssign等。当然,数组不存在这些函数,因此第二个要点适用于此。

a = a + b 生成代码, 需要有一个 plus数组的运算符函数,获取该数组的一个元素,并返回一个数组,以便将其转换为 a = a.plus(b) .确实有such an operator function对于 Array<T> .

operator fun <T> Array<T>.plus(element: T): Array<T>

总结一下:

emptyArray += 1

翻译成

emptyArray = emptyArray + 1

翻译成:

emptyArray = emptyArray.plus(1)

关于arrays - Kotlin - 向空数组添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71469181/

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