Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 仅当不为null时才将参数传递给函数_Kotlin_Default Parameters - Fatal编程技术网

Kotlin 仅当不为null时才将参数传递给函数

Kotlin 仅当不为null时才将参数传递给函数,kotlin,default-parameters,Kotlin,Default Parameters,我需要将一个可为null的参数传递给一个函数,该函数只接受不可为null的对象,但定义了一个默认值 目前我正在使用let: fun myFun(a:String = "qqq"): Whatever {...} val myString:String? = getNullableString() val myFunResult = myString.?let{myFun(it)}?:myFun() 这是冗长的,如果有多个可选参数,就不可能了。 我需要像这样的东西 val myFunResu

我需要将一个可为null的参数传递给一个函数,该函数只接受不可为null的对象,但定义了一个默认值

目前我正在使用let:

fun myFun(a:String = "qqq"): Whatever {...}

val myString:String? = getNullableString()

val myFunResult = myString.?let{myFun(it)}?:myFun()
这是冗长的,如果有多个可选参数,就不可能了。 我需要像这样的东西

val myFunResult = myFun(myString?:default)

有没有切实可行的方法可以做到这一点?

您可以允许将可为空的值作为参数传递到函数中,将命名的默认值更改为
null
,并在函数体中设置实际的默认值:

fun myFun(a: String? = null) {
    val a = a ?: DEFAULT_VALUE
    // rest of the function
}

val myFunResult = myFun(myString)

如果你不想在函数之外重复默认值(我不会),你必须做一些条件检查。就我个人而言,我发现在扫描代码时很难读懂
let
表达式,并且可能只会使用
if
。请记住,在Kotlin中,
如果
是一个表达式:

if(myString == null) myFun() else myFun(myString)

因为您提到了您不能更改您正在调用的初始函数。编写一个新函数来调用初始函数可能是一种更具可读性的方法

fun myFun(a:String = "qqq"): Whatever {...}
fun myNewFun(a:String? = null): Whatever = if(a == null) myFun() else myFun(a)

我注意到您的函数没有返回任何内容!!是的,这只是一个澄清问题的例子,如果您愿意,您可以忘记赋值:)我会更正它,但我并不总是控制我调用的函数(此外,这在方法体中隐藏了一点实际的默认值)。还有别的办法吗?@OldManofAran是的,不幸的是,你在这一点上失去了一些清晰度。为了干净的代码,另一种方法是将当前方法包装到另一个具有可空参数的命名良好的函数中。我不认为还有什么别的,因为Kotlin创建了一个合成方法,用硬编码的默认值调用函数。