apply 函数不适用于 kotlin 中的基本类型
apply function does not work for basic types in kotlin
我正在尝试使用 apply 函数为变量分配新值。
当我尝试 apply() 将值重新分配给数据 class 的参数时,它工作正常。但是当我没有数据时 class 它不起作用!
数据class示例:
data class A(
var a: Int,
)
val a1 = A(3)
val a2 = a1.apply {
a = 5
}
println("a1 = ${a1.a}, a2 = ${a2.a}")
基本类型示例:
var a1 = 3
var a2 = a1.apply {
a1 = 5
}
println("a1 = $a1, a2 = $a2")
第一个例子的结果是:
a1 = 5, a2 = 5
但是第二个例子的结果是:
a1 = 5, a2 = 3
我不明白为什么 a2
仍然是 3 并且申请对它不起作用!
我希望 a1 = 5
将 5 值重新分配给 a2
但它没有!
能解释一下吗?
Int class 是不可变的。您不能更改它的实例的值。请注意您的两个代码示例中的差异。首先,您要将 A
class 的 a
属性 更改为不同的值。所以,你正在 变异 A
的实例。
在您的第二个代码示例中,您没有更改实例内部的值。您正在更改变量 a1
以指向一个完全不同的 Int 实例。您的 apply
块毫无意义,因为您没有使用它来调用 Int class 的任何 member 函数或属性。您正在直接重新分配变量 a1
.
所有 Kotlin 标准库 Number classes 以及 String、BigInteger 和 BigDecimal 都是不可变的 classes,您无法更改实例内部的值。您只能重新分配 variables/properties 以指向其他实例。
我正在尝试使用 apply 函数为变量分配新值。 当我尝试 apply() 将值重新分配给数据 class 的参数时,它工作正常。但是当我没有数据时 class 它不起作用!
数据class示例:
data class A(
var a: Int,
)
val a1 = A(3)
val a2 = a1.apply {
a = 5
}
println("a1 = ${a1.a}, a2 = ${a2.a}")
基本类型示例:
var a1 = 3
var a2 = a1.apply {
a1 = 5
}
println("a1 = $a1, a2 = $a2")
第一个例子的结果是:
a1 = 5, a2 = 5
但是第二个例子的结果是:
a1 = 5, a2 = 3
我不明白为什么 a2
仍然是 3 并且申请对它不起作用!
我希望 a1 = 5
将 5 值重新分配给 a2
但它没有!
能解释一下吗?
Int class 是不可变的。您不能更改它的实例的值。请注意您的两个代码示例中的差异。首先,您要将 A
class 的 a
属性 更改为不同的值。所以,你正在 变异 A
的实例。
在您的第二个代码示例中,您没有更改实例内部的值。您正在更改变量 a1
以指向一个完全不同的 Int 实例。您的 apply
块毫无意义,因为您没有使用它来调用 Int class 的任何 member 函数或属性。您正在直接重新分配变量 a1
.
所有 Kotlin 标准库 Number classes 以及 String、BigInteger 和 BigDecimal 都是不可变的 classes,您无法更改实例内部的值。您只能重新分配 variables/properties 以指向其他实例。