如何不传递一些参数

时间:2019-08-08 07:52:28

标签: kotlin

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

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参数?

2 个答案:

答案 0 :(得分:2)

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

示例:

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样式”重载的方式调用。

但是,下面的函数呢?

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

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

答案 1 :(得分:1)

如何为这些参数设置默认值,如:

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


getOperationsList(
        typesList = list
        operationStatusList = arrayOf(OperationStatus.CREATED),
        callback = callback
)