Kotlin 科特林+;let方法+;这个关键词

Kotlin 科特林+;let方法+;这个关键词,kotlin,Kotlin,Venkat在第237页的《Kotlin编程》一书中解释了fluent方法ALL()、apply()、let()和run()之间的区别 但是列出的代码没有编译 特别是这两个调用:编译器说,“'this'未在此上下文中定义” 所以我的问题是:let()和allow()是否支持'this'关键字。如果您查看let的源函数: public inline fun <T, R> T.let(block: (T) -> R): R { contract { call

Venkat在第237页的《Kotlin编程》一书中解释了fluent方法ALL()、apply()、let()和run()之间的区别

但是列出的代码没有编译

特别是这两个调用:编译器说,
“'this'未在此上下文中定义”


所以我的问题是:let()和allow()是否支持'this'关键字。

如果您查看
let
的源函数:

public inline fun <T, R> T.let(block: (T) -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block(this)
}
的情况也一样

let
之间的区别在于它们如何返回
let
返回块返回的内容,
还将返回对象本身,并且
let
使用lambda作为参数,因此可以使用
it
访问参数,
还使用lambda接收器,使参数可以作为
this
访问

TL;DR


let
中,关键字
this
将引用它所属的类。因此,如果它不在类中,这将不涉及任何内容。

如果您查看
let
的源函数:

public inline fun <T, R> T.let(block: (T) -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block(this)
}
的情况也一样

let
之间的区别在于它们如何返回
let
返回块返回的内容,
还将返回对象本身,并且
let
使用lambda作为参数,因此可以使用
it
访问参数,
还使用lambda接收器,使参数可以作为
this
访问

TL;DR


let
中,关键字
this
将引用它所属的类。因此,如果它不在类中,这将不表示任何内容。

它们不在类中。看见你也可以看看和的签名,看看有什么不同。它们没有。看见此外,您还可以查看和的签名,以查看差异。Mmm。还值得一提的是,将接收器绑定到
而不是
还()
应用()
之间以及
让()
运行()
之间的主要区别。还值得一提的是,将接收器绑定到
而不是
还()
应用()
之间以及
让()
运行()
之间的主要区别。
class Clazz {

  fun function() {
     something.let {
        // `this` refers to class scope, so `this` is a Clazz
        // `it` refers to the something itself
     }
  }
}