为什么Kotlin在运算符重载之外使用运算符修饰符?

时间:2017-04-17 16:23:46

标签: kotlin

我对Kotlin中operator修饰符的使用感到有些困惑。例如,Kotlin在解构声明和属性委托期间使用operator修饰符,恕我直言(原谅我的无知),有点令人困惑,因为这两种情况都超出了运算符重载。

解构:

operator fun <K, V> Map<K, V>.iterator(): Iterator<Map.Entry<K, V>> = entrySet().iterator()
operator fun <K, V> Map.Entry<K, V>.component1() = getKey()
operator fun <K, V> Map.Entry<K, V>.component2() = getValue()

for ((key, value) in map) {
    // ...
}

属性委托:

interface ReadOnlyProperty<in R, out T> {
    operator fun getValue(thisRef: R, property: KProperty<*>): T
}

interface ReadWriteProperty<in R, T> {
    operator fun getValue(thisRef: R, property: KProperty<*>): T
    operator fun setValue(thisRef: R, property: KProperty<*>, value: T)
}

1 个答案:

答案 0 :(得分:6)

我在Kotlin中假设Input.GetButton("Fire")表示“通过名称约定访问”,对于运算符(operatorplus()等),组件访问者(minusAssign()等),for循环访问器(component1()iteratornext)和委托访问器(hasNext等)