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'
我怎么不能通过from
和to
参数?
解决方案
使用默认参数。在您的情况下,您实际上没有在那里传递任何参数,因此编译器失败是完全正常的。
例子:
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 个参数来调用此函数。
推荐阅读
- java - 使用 Homebrew 安装 OpenCV 时选择 Java 版本
- amazon-web-services - Lambda@Edge 和 AWS EC2 延迟比较
- amazon-web-services - VPC中的Web服务器,如何公开访问?
- python - 将文本列表转成 json 格式列表
- javascript - 用标签替换多次重复出现的 &&和 %%
- c# - NuGetSdkResolver.dll 正在 mssiing
- javascript - 按自定义属性搜索 amazon cognito 用户
- node.js - Sequelize 查询返回 Promise。如何等待查询返回结果?
- php - str_replace,给我错误的结果仅当其中有数字时
- regex - 用正则表达式忽略某些字符