Kotlin 默认参数只在最后起作用

Kotlin default parameter only work at the end

我希望我的一些函数参数是可选的,所以我使用了如下默认参数:

fun defaultparameter(param1: String = "", param2: String = "", param3: Int = 0)

这项工作我可以做到:

defaultparameter()
defaultparameter("titi")
defaultparameter("titi", "tata")

我可以这样做,因为默认参数在末尾但是当我的参数在中间时:defaultparameter("titi", 0) 这不起作用,它要求我 param2.

我猜编译器只能在末尾有参数的情况下省略参数,但这是正常的吗?我知道当参数是同一类型时,编译器无法知道哪个是哪个,但这里我有一个 Int 类型,所以我认为它会起作用。

我的问题是:默认参数只在最后有效?还是我错过了什么?有没有什么方法可以在不使用多态性并声明只有两个参数的其他函数的情况下实现这一点:一个 String 和一个 Int?

您可以使用关键字参数:

defaultparameter("titi", param3 = 2)

根据 Kotlin Named Arguments 文档:

When you use named arguments in a function call, you can freely change the order they are listed in, and if you want to use their default values you can just leave them out altogether.

即调用方法如下

defaultparameter(param1 = "titi", param3 = 0)