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

Aqu*_*hka 5 named-parameters default-parameters kotlin

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

fun defaultparameter(param1: String = "", param2: String = "", param3: Int = 0)
Run Code Online (Sandbox Code Playgroud)

这项工作我可以做到这一点:

defaultparameter()
defaultparameter("titi")
defaultparameter("titi", "tata")
Run Code Online (Sandbox Code Playgroud)

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

我猜测编译器只能省略末尾的参数,但这正常吗?我知道当参数是相同类型时,编译器无法知道哪个是哪个,但这里我Int最后有一个类型,所以我认为它可以工作。

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

Hac*_*ck5 5

您可以使用关键字参数:

defaultparameter("titi", param3 = 2)
Run Code Online (Sandbox Code Playgroud)


Oni*_*nik 5

根据Kotlin 命名参数文档:

当您在函数调用中使用命名参数时,您可以自由更改它们列出的顺序,如果您想使用它们的默认值,您可以完全忽略它们。

即调用方法如下

defaultparameter(param1 = "titi", param3 = 0)
Run Code Online (Sandbox Code Playgroud)