gpt4 book ai didi

Kotlin - 覆盖/实现类似数组的访问器函数

转载 作者:IT老高 更新时间:2023-10-28 13:41:12 25 4
gpt4 key购买 nike

是否可以在 Kotlin 中覆盖或实现 [] 访问器(使用运算符重载或类似方法)?

val testObject = MyCustumObject()
println(testObject["hi"]) // i.e. implement this accessor.

在 Python 中,这可以通过实现 __getitem____setitem__ 来实现。

最佳答案

在 Kotlin 中,它是 get and set operator functions你需要实现的:

class C {
operator fun get(s: String, x: Int) = s + x
operator fun set(x: Int, y: Int, value: String) {
println("Putting $value at [$x, $y]")
}
}

及用法:

val c = C()
val a = c["123", 4] // "1234"
c[1, 2] = "abc" // Putting abc at [1, 2]

您可以定义getset indices 有任意数量的参数(当然至少有一个);此外,set将在使用站点分配的表达式作为其最后一个参数传递:

  • a[i_1, ..., i_n]被翻译成a.get(i_1, ..., i_n)

  • a[i_1, ..., i_n] = b被翻译成a.set(i_1, ..., i_n, b)

getset也可以有不同的重载,例如:

class MyOrderedMap<K, V> {
// ...

operator fun get(index: Int): Pair<K, V> = ... // i-th added mapping
operator fun get(key: K): V = ... // value by key
}

注意:此示例为 MyOrderedMap<Int, SomeType> 引入了不希望的歧义。因为这两个 get函数将匹配 m[1] 之类的调用.

关于Kotlin - 覆盖/实现类似数组的访问器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40721131/

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