当传递给varargs参数时,Kotlin能否过滤掉空参数?
kotlin中的此函数需要零对或多对属性当传递给varargs参数时,Kotlin能否过滤掉空参数?,kotlin,variadic-functions,Kotlin,Variadic Functions,kotlin中的此函数需要零对或多对属性 fun trackEvent(vararg properties: Pair<Any?, Any?>){ ... } 其中timeStr和user是可为空的字符串 到目前为止还不错,但这需要我们手动将所有变量分别传递给跟踪函数,而只传递一个对象会更容易。为了解决这个问题,我创建了一个函数,它接受一个Kotlin类并输出一个Pair对象数组 fun Any.toArrOfPairs(): Array<Pair<Any?, A
fun trackEvent(vararg properties: Pair<Any?, Any?>){
...
}
其中timeStr
和user
是可为空的字符串
到目前为止还不错,但这需要我们手动将所有变量分别传递给跟踪函数,而只传递一个对象会更容易。为了解决这个问题,我创建了一个函数,它接受一个Kotlin类并输出一个Pair
对象数组
fun Any.toArrOfPairs(): Array<Pair<Any?, Any?>>
{
...
}
有一个编译器错误;然而:
kotlin似乎担心source
为空的情况。在这种情况下,是否有优雅的方法告诉它使用空数组调用trackEvent
类似地,如果我们结合使用以下方法并调用trackEvent
,是否有办法告诉kotlin“如果source
为null,只需传入其他参数(在本例中为“time”对)
使助手函数接受一个可为null的接收器,并为null的情况返回一个空数组:
fun Any?.toArrOfPairs(): Array<Pair<Any?, Any?>>
{
this ?: return emptyArray()
// Your original code ...
}
我不确定我是否完全理解你问题的最后一部分。如果你想将显式参数和数组结合起来,你可以:
trackEvent(
"time" to timeStr,
*source.toArrOfPairs()
)
如果您只想在源为null时使用显式参数,可以使用Elvis运算符,但这有点难看,因为您必须将显式参数放入数组中:
trackEvent(
*(source?.toArrOfPairs() ?: arrayOf("time" to timeStr))
)
或者只使用if语句。可能更详细,但更易于阅读:
if (source != null) {
trackEvent(*source.toArrOfPairs())
} else {
trackEvent(
"time" to timeStr
)
}
使助手函数接受一个可为null的接收器,并为null的情况返回一个空数组:
fun Any?.toArrOfPairs(): Array<Pair<Any?, Any?>>
{
this ?: return emptyArray()
// Your original code ...
}
我不确定我是否完全理解你问题的最后一部分。如果你想将显式参数和数组结合起来,你可以:
trackEvent(
"time" to timeStr,
*source.toArrOfPairs()
)
如果您只想在源为null时使用显式参数,可以使用Elvis运算符,但这有点难看,因为您必须将显式参数放入数组中:
trackEvent(
*(source?.toArrOfPairs() ?: arrayOf("time" to timeStr))
)
或者只使用if语句。可能更详细,但更易于阅读:
if (source != null) {
trackEvent(*source.toArrOfPairs())
} else {
trackEvent(
"time" to timeStr
)
}
这很漂亮,谢谢。最后一个问题只是问如何组合您回答的两种输入。再次感谢!这很漂亮,谢谢。最后一个问题只是问如何组合您回答的两种输入。再次感谢!