我正在Kotlin Koans上练习Kotlin,现在正要解决Named Arguments问题。
命名参数
默认和命名参数有助于最大程度地减少重载次数 并提高函数调用的可读性。图书馆 函数joinToString声明为参数的默认值:
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]
所以我只是想知道我是否缺少什么? -他们在这个问题上打算干什么?
答案 0 :(得分:2)
println(collection)
在toString()
对象上调用Collection
方法,某些集合将以以下格式打印其内容:
[1, 2, 3]
的确等同于调用
collection.joinToString(prefix = "[", delimiter = ", ", postfix = "]")
但是,您无法修改此行为,例如,如果您想单独打印集合中的每个元素,则必须编写自己的toString()
实现。这是joinToString()
派上用场的地方,您只需完成
collection.joinToString(delimiter = "\n")
请注意,您无需为prefix
或postfix
传递参数,因为默认值适合您的用例。
Koans示例可能不太容易混淆,但它确实可以说明命名参数和默认值的用法。
答案 1 :(得分:0)
解决方案是这样的:
fun joinOptions(options: Collection<String>) = options.joinToString(
prefix = "[",
separator = ", ",
postfix = "]"
)