我几乎知道语言中“这个表达”的意思。但下面的 Kotlin 代码让人完全困惑:
fun <A, B, C> (A.(B) -> C).swap(): (B.(A) -> C) = { a: A -> // 1
a.this@swap(this)
}
函数定义的解释短语是:“
swap
作为将 A.(B)->C
类型的函数转换为函数的函数”
类型为 B.(A)->C
,基本上交换类型为 A
和 B
的接收器。
a.this
是我无法得到的东西。如果只是 this
在那个地方,我就会明白范围属于 (A.(B) -> C)。
a.this@swap
现在是怪物了,a.this@swap(this)
是大脑爆炸。
如果我认为
a.this
是a
的“外部”,那么这是真的,但如果是这样,我也不明白它是什么。对不起我的英语。
您正在谈论
a.this
,但函数体根本没有使用a.this
。事实上,您应该通过将 this@swap
视为一个单独的实例来解析函数体。
在
swap
的定义中:
this
是 lambda 的实例,这不是你想要的。this@swap
是函数swap
的接收者。该接收器是另一个函数的实例。考虑典型用法:
val add: String.(String) -> String = { this + it }
"a".add("b") // gives "ab"
val addTo = add.swap()
"a".addTo("b") // gives "ba"
交换函数通过交换其接收者及其参数来转换
add
函数。