Явное возвращение из лямбда-выражения в Котлине

Используя 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 .

Я мог бы положить оставшуюся часть лямбды в else блок, но я бы предпочел не в интересах минимизации отступов.

Итак, как мне «закоротить» лямбду, чтобы вернуть нуль?

В моем понимании, Lambda can not use return, return для функции по умолчанию.

Поэтому вам нужно использовать метку, чтобы сообщить предложение 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 })