从Kotlin中的lambda表达式显式返回

使用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?

在我的理解,Lambda不能使用返回,默认情况下,返回的是功能。

所以你需要使用一个标签来告诉return子句将返回的地方。 我使用这个:

 f@ { ... return@f null } 

我发现这似乎工作,虽然它有点冗长:

 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 })