地图的 Kotlin 默认参数和命名参数

Kotlin default parameter and named argument for map

我正在编写一个方法,我使用默认参数和命名参数,因为有时不需要某些参数,而且使用默认值对我来说更容易。但是我在使用地图时遇到了麻烦。

 fun search(scope: String = "", page: Int = 0, filters: Map<String, String>, withAuthorization: Boolean = false)

这是我的方法,效果很好。我可以这样称呼它:

search("scope", 0, mapOf("filter" to "test"), true)

或者我可以省略一些参数,因为它们有默认值:

search("scope", 0, mapOf("filter" to "test")) 

但是默认值只在方法的末尾起作用,所以我也使用命名参数,我想跳过中间的参数:

search("scope", filters = mapOf("filter" to "test"), withAuthorization = true) 

所有这些工作我都很满意,问题是有时我没有过滤器可以应用所以我不想使用文件管理器映射作为参数但我没有设法做到这一点。我尝试添加这样的默认参数:filters: Map<String, String> = mapOf() 但是当我这样调用方法时: search("scope", 0, withAuthorization = true) 我得到一个错误:No value passed for parameter 'filters'

所以我想知道是否有办法给地图一个默认参数或任何其他方式可以阻止我发送我的地图过滤器,因为我不需要使用它想向我的方法搜索发送一个空地图。

它应该按照您描述的方式工作:

fun search(scope: String = "", page: Int = 0, filters: Map<String, String> = mapOf(), withAuthorization: Boolean = false) {
    ...
}