在我的代码中,我有一个像这样的结构
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>)
实例。如何实现?
答案 0 :(得分:6)
从技术上讲,您可以使用自定义标签标记lambda,然后将这些标签与标签一起使用。例如:
with(foo()) mylabel@{
with(bar()) {
baz(this@mylabel)
}
}
但是,为了提高可读性,可以使用with
范围函数并为参数提供名称,而不是let
:
foo().let { fooResult ->
bar().let { barResult ->
baz(fooResult)
}
}