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