我在Kotlin Koans上练习Kotlin,并掌握了命名的参数问题。
命名参数
默认和命名参数有助于最大程度地减少过载的数量 并提高功能调用的可读性。图书馆 函数关节串有参数的默认值:
fun joinToString(
separator: String = ", ",
prefix: String = "",
postfix: String = "",
/* ... */
): String
可以在字符串集合中调用。仅指定两个 参数使函数joinOptions()返回JSON中的列表 格式(例如," [a,b,c]")
答案:
fun joinOptions(options: Collection<String>) = options.joinToString(prefix = "[", postfix = "]")
将" ["添加到开始和"]"到集合的末尾。但是,我尝试使用和不带有joinOptions()
打印该系列,它们都有相同的结果:
val collection: Collection<Int> = listOf(1, 2, 3)
fun joinNumbers(numbers: Collection<Int>) = numbers.joinToString(prefix = "[[", postfix = "]")
println(collection) // prints [1, 2, 3]
println(joinNumbers((collection))) // prints [1, 2, 3]
所以我很好奇我是否错过了什么? - 他们在这个问题中要做什么?
println(collection)
调用 Collection
对象上的 toString()
方法,某些集合将以以下格式打印其内容:
[1, 2, 3]
的确等同于调用
collection.joinToString(prefix = "[", delimiter = ", ", postfix = "]")
不过,您不能修改此行为,因此,例如,如果您想在集合自己的行中打印每个元素,则必须编写自己的toString()
实现。这是joinToString()
方便的地方,您可以做
collection.joinToString(delimiter = "n")
请注意,您不需要通过prefix
或postfix
的参数,因为默认值适合您的用例。
koans示例可能会不那么令人困惑,但是它可以说明命名参数和默认值的用法。
解决方案就是这样:
fun joinOptions(options: Collection<String>) = options.joinToString(
prefix = "[",
separator = ", ",
postfix = "]"
)