例如,您可能具有带有复杂签名和varargs的函数:
fun complicated(easy: Boolean = false, hard: Boolean = true, vararg numbers: Int)
您应该能够像下面这样调用此函数是有道理的:
complicated(numbers = 1, 2, 3, 4, 5)
不幸的是,编译器不允许这样做。
是否可以对varargs使用命名参数?有什么聪明的解决方法吗?
最佳答案
可以通过在vararg
之后移动可选参数来解决此问题:
fun complicated(vararg numbers: Int, easy: Boolean = false, hard: Boolean = true) = {}
然后可以这样称呼它:
complicated(1, 2, 3, 4, 5)
complicated(1, 2, 3, hard = true)
complicated(1, easy = true)
请注意,结尾的可选参数需要始终与名称一起传递。
这不会编译:
complicated(1, 2, 3, 4, true, true) // compile error
另一个选择是将
vararg
糖留给显式数组参数:fun complicated(easy: Boolean = false, hard: Boolean = true, numbers: IntArray) = {}
complicated(numbers = intArrayOf(1, 2, 3, 4, 5))