Kotlin:嵌套的未命名函数中的这个表达式

时间:2018-02-17 04:06:11

标签: kotlin

Kotlin文档描述了如何在嵌套类中访问this expressions

是否可以在嵌套的未命名函数中访问表达式? e.g:

str = "abcde"
str.run {                                                                                                                                                                                              
this.substring(0..2).run {                                                                                                                                                                         
    println("${this} is a substring of ${???}")                                                                                                                                                    
}

1 个答案:

答案 0 :(得分:2)

只是为了回答被问到的问题,对于可以提高可读性的情况,你可以use a label

str.run outer@ { // Define a label
    this.substring(0..2).run {
        println("${this} is a substring of ${this@outer}") // Use the label
    }
}

通常,您将使用隐式标签。例如,如果将外部调用更改为使用内部调用中的其他函数名称,则可以访问它:

with (str) {
    this.substring(0..2).run {
        println("${this} is a substring of ${this@with}") // Use the implicit label
    }
}