【问题标题】:How does defining functions within functions work?在函数内定义函数如何工作?
【发布时间】:2023-01-19 16:24:21
【问题描述】:

我试图通过制作一个 Ktor 程序来了解 Kotlin,并且在我注意到这一点时正在关注文档:

fun Application.configureRouting() {

    routing {
        get("/") {
            call.respondText("Hello World!")
        }
    }
}

routing {}get("/") {} 是如何工作的?这是什么意思? Application.configureRouting() 函数中的路由和获取函数是否被覆盖?

【问题讨论】:

标签: kotlin ktor


【解决方案1】:

我想你很困惑科特林的type-safe builderslocal functions.可以在另一个函数中定义一个函数(局部函数)这限制了我们可以访问子函数的范围。

这是一个例子局部函数:

fun foo() {
    fun bar() {
        println("I'm within a local function.")
    }

    println("We can call bar only from foo.")
    bar()
}

的情况下类型安全的构建器 (你代码的routing函数),启用这种外观的语法的一部分是:

根据 Kotlin 约定,如果函数的最后一个参数是一个函数,那么可以放置一个作为相应参数传递的 lambda 表达式括号外.

当函数的唯一参数是 lambda 类型时,括号可以是省略.此外,将 a receiver 添加到单个 lambda 参数将导致类似于您提到的 routing 函数的行为。如果我的解释不够充分,你可以阅读更多关于类型安全的构建器from the official docs

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多