hol*_*ava 52
根本不需要Kotlin中的交换功能.您可以使用现有的还功能,例如:
var a = 1
var b = 2
a = b.also { b = a }
println(a) // print 2
println(b) // print 1
Run Code Online (Sandbox Code Playgroud)
Ruc*_*oom 11
如果你想写一些非常可怕的代码,你可以有这样的函数:
inline operator fun <T> T.invoke(dummy: () -> Unit): T {
dummy()
return this
}
Run Code Online (Sandbox Code Playgroud)
这将允许您编写这样的代码
a = b { b = a }
Run Code Online (Sandbox Code Playgroud)
请注意,我不建议这样做.只是表明它是可能的.
Kotlin 鼓励在可能的情况下使用不可变数据(例如使用val代替var)。这大大减少了细微错误的更改,因为如果值不更改,则可以更合理地推理代码。
交换两个值与不可变数据非常相反:我的意思a是交换之前还是之后的值?
考虑以以下不可变方式重写您的代码:
val a = 1
val b = 2
val (a2, b2) = b to a
Run Code Online (Sandbox Code Playgroud)
这通过使用解构声明以及to创建Pair.
这是with 的一个很好的用法:
var a = 1
var b = 2
with(a) {
a = b
b = this
}
println(a) // 2
println(b) // 1
Run Code Online (Sandbox Code Playgroud)
编辑:感谢@hotkey的评论
我相信交换两个变量的代码很简单 - 不要再尝试简化它了.
最优雅的实施形式恕我直言:
var a = 1
var b = 2
run { val temp = a; a = b; b = temp }
println(a) // print 2
println(b) // print 1
Run Code Online (Sandbox Code Playgroud)
优点:
temp 不会留在范围内.| 归档时间: |
|
| 查看次数: |
8402 次 |
| 最近记录: |