Kotlin 中的“这个表达式”

问题描述 投票:0回答:1

我几乎知道语言中“这个表达”的意思。但下面的 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
的“外部”,那么这是真的,但如果是这样,我也不明白它是什么。对不起我的英语。

kotlin this
1个回答
0
投票

您正在谈论

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
函数。

© www.soinside.com 2019 - 2024. All rights reserved.