首页 > 解决方案 > 如何不在函数中传递一些参数

问题描述

我需要在这里使用可选参数(从和到)代码:

fun getOperationsList(
        vararg typesList: OperationType,
        operationStatusList: Array<OperationStatus>,
        from: Date, to: Date,
        callback: Callback<List<Operation>>
    ) {...}

这里使用:

 fun getDraftList(callback: Callback<List<Operation>>) {
        getOperationsList(
            operationStatusList = arrayOf(OperationStatus.CREATED),
            from = Date(),
            to = Date(),
            callback = callback
        )
    }

很好,这项工作很好。

但现在我想省略和省略参数我试试这个:

 fun getDraftList2(callback: Callback<List<Operation>>) {
        getOperationsList(operationStatusList = arrayOf(OperationStatus.CREATED), callback = callback)
    }
}

但我得到编译错误:

No value passed for parameter 'from' No value passed for parameter 'to'

我怎么不能通过fromto参数?

标签: kotlin

解决方案


使用默认参数。在您的情况下,您实际上没有在那里传递任何参数,因此编译器失败是完全正常的。

例子:

fun test(
    p1: T1,
    p2: T2
) {
    // code here
}

这个函数可以这样调用:

test(t1, t2)
test(p1 = t1, p2 = t2)

但是,您不能仅使用一个参数调用此函数,例如test(t1). 对于这种情况,您可以使用默认参数:

fun test(
    p1: T1,
    p2: T2? = null
) {
    // code here
}

而且这个函数只能用一个参数调用,比如test(t1). 在这种情况下,默认参数被完全省略。函数可以以“java-style”重载方式调用。

但是,下面的函数呢?

fun test(
    p1: T1,
    p2: T2? = null,
    p3: T3
) {
}

这有点棘手,因为您总是必须使用命名参数或传递所有 3 个参数来调用此函数。


推荐阅读