gpt4 book ai didi

kotlin - 以编程方式决定将哪些参数传递给具有默认参数的函数?

转载 作者:行者123 更新时间:2023-12-02 12:52:45 24 4
gpt4 key购买 nike

我尝试为具有多个默认值参数的 kotlin 函数实现数据驱动测试。

在我的测试定义中,我希望能够省略在函数声明中具有默认参数的任何参数组合。我看不出它是如何工作的(每个默认值组合都没有单独的分支)。

也许用代码解释会更好:

import kotlin.test.assertEquals

fun foobalize(start: Int = 0, separator: String = "\t", convert: Boolean = false): Int {
return 0 // implementation omitted
}

data class TestSpec(
val start: Int? = null, // null should mean: Don't pass this argument to foobalize(), but use its default value
val separator: String? = null, // dito
val convert: Boolean? = null, // dito
val expectedResult: Int
)

fun testFoobalize(testSpec: TestSpec) {
// How to call foobalize here with values from TestSpec, but leave out parameters that are null,
// so that the defaults from the fopobalize() function declaration are used???
val actualResult = foobalize(start = testSpec.start)
assertEquals(testSpec.expectedResult, actualResult)
}

是否有一些完全不同的方法来做到这一点?

最佳答案

默认参数是 kotlin 编译器的一个特性,因此在运行时使用它并不容易。 reflection 应该可以虽然。

IMO 如果您真的想要这种方式,最好使用另一种方法增强 API,该方法将数据类作为参数。

data classc Spec(val start: Int = 0, val separator: String = "\t", val convert: Boolean = false)

fun foobalize(start: Int, separator: String, convert: Boolean): Int {}

fun foobalize(spec: Spec) = foobalize(spec.start, spec.separator, spec.convert)

关于kotlin - 以编程方式决定将哪些参数传递给具有默认参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com