kotlin - 如何在另一个参数中重用一个参数的值

标签 kotlin

我已经创建了一个对象,但是对于其中一个参数,创建过程很复杂。创建它后,我想将相同的值用于另一个参数。让我简单地给你看一个例子:

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/

相关文章:

java - 如何以编程方式从 Android 获取自定义 ROM/Android 操作系统名称

android - 我怎样才能在可组合函数中运行我的逻辑代码 1 次?

android - 如何在 Kotlin 中实现 java SAM 接口(interface)?

json - 在Kotlin中使用GSON解析JSON

android - imageView 在 recyclerview viewholder 中为 null

Kotlin 1.3 : how to execute a block on a separate thread?

android - 很长的 gradle 构建时间 - Android

android - 如何使用 Kotlin dev Android 获取我的位置?

android - Jetpack Compose : When using Modifier. selectable 如何防止可组合布局在滚动时被选择?

android - 如何从 KClass 反射进行 Kotlin 类型推断?