обратитесь из внутренней функции `with` к функции более высокого уровня` with` - PullRequest
0 голосов
/ 17 октября 2018

В моем коде у меня есть такая структура

post { req ->
    with(req.objectBody<Person>()) {
        logger.info { "Attempt to save person $this" }
        with(require<SessionFactory>().openSession()) {
            save(this@with)
        }
    }
}

Но IDE предупреждает меня, что there is more than one label with such a name.В этом случае

save(this@with)

Я хочу сослаться на with(req.objectBody<Person>) экземпляр.Как этого добиться?

1 Ответ

0 голосов
/ 17 октября 2018

Технически, вы можете пометить лямбды с пользовательскими метками, а затем использовать помеченные этим с этими метками.например:

with(foo()) mylabel@{
    with(bar()) {
        baz(this@mylabel)
    }
}

Однако для улучшения читабельности вместо with можно использовать функцию определения области действия let и указать имя для параметра:

foo().let { fooResult ->
    bar().let { barResult ->
        baz(fooResult)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...