我已经创建了一个对象,但是对于其中一个参数,创建过程很复杂。创建它后,我想将相同的值用于另一个参数。让我简单地给你看一个例子:
MyModel(convenienceFee = raw.data?.fee,
data = raw.data?.order?.map {/*complex operation that returns a list*/} ?: emptyList(),
summary = createSummaryFrom(data), //compiler wont allow me using data here
)
createSummaryFrom 无关紧要,它只需要一个列表并对其进行一些操作。但问题是我无法在最后一行使用“数据”。它说它是一个 Unresolved 领域。如何在另一个参数中使用已声明参数的值?
显然我可以将调用移到声明之外,但想知道为什么我可以在声明的同时在内部进行。
最佳答案
一个 .run
或 .let
作用域函数可用于实现类似的功能,但禁止引用另一个参数名称。我应该注意,这段代码也可以通过典型的变量使用来实现,但是,从语法上讲,.let
更符合您的愿望。
val model: MyModel = raw.data.let { rawData ->
(rawData?.order?.map { ... } ?: emptyList()).let { transformedData ->
MyModel(
convenienceFee = rawData?.fee,
data = transformedData,
summary = createSummaryFrom(transformedData)
)
}
}
如果您愿意,可以阅读 Kotlin 的五个作用域函数 here .根据有关可读性的有效反馈进行编辑:
应适当使用范围函数。在这个问题的范围之外,我更喜欢以下内容:
val rawData = raw.data
val transformedData = rawData?.order?.map { ... } ?: emptyList()
val model = MyModel(
convenienceFee = rawData?.fee,
data = transformedData,
summary = createSummaryFrom(transformedData)
)
关于kotlin - 如何在另一个参数中重用一个参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64128911/