【问题标题】:Explicitly returning from lambda expression in Kotlin从 Kotlin 中的 lambda 表达式显式返回
【发布时间】:2016-01-09 04:07:14
【问题描述】:

使用Spark,我最终得到了如下代码:

post("/auth/login", { req, res ->
    val body = parseBody(req.body())
    val assertion = body["assertion"]
    if (assertion == null) {
        halt(400)
        return null
    }
    // ...snip...lots more code
})

这很好用,除了...它不能编译——我得到'return' is not allowed here

可以将 lambda 的其余部分放在 else 块中,但我不希望最小化缩进。

那么我如何“短路” lambda 以返回 null?

【问题讨论】:

    标签: kotlin spark-java


    【解决方案1】:

    据我了解,Lambda不能使用return,return默认是针对函数的。

    所以你需要使用一个标签来告诉 return 子句它将返回到哪里。 我用这个:

    f@ {
     ...
     return@f null
    }
    

    【讨论】:

    【解决方案2】:

    我发现这似乎可行,虽然它有点冗长:

    post("/auth/login", fun(req, res): Any? {
        val body = parseBody(req.body())
        val assertion = body["assertion"]
        if (assertion == null) {
            halt(400)
            return null
        }
        // ...snip...lots more code
        return null // or whatever
    })
    

    【讨论】:

    • 这就是我最终用于 Spark 的。效果很好,与调用的大小相比,代码开销很小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2019-09-19
    • 2016-05-30
    相关资源
    最近更新 更多