Kotlin Koans:命名参数解决方案

时间:2019-02-23 03:31:26

标签: kotlin collections

我正在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]

所以我只是想知道我是否缺少什么? -他们在这个问题上打算干什么?

2 个答案:

答案 0 :(得分:2)

println(collection)toString()对象上调用Collection方法,某些集合将以以下格式打印其内容:

[1, 2, 3]

的确等同于调用

collection.joinToString(prefix = "[", delimiter = ", ", postfix = "]")

但是,您无法修改此行为,例如,如果您想单独打印集合中的每个元素,则必须编写自己的toString()实现。这是joinToString()派上用场的地方,您只需完成

collection.joinToString(delimiter = "\n")

请注意,您无需为prefixpostfix传递参数,因为默认值适合您的用例。

Koans示例可能不太容易混淆,但它确实可以说明命名参数和默认值的用法。

答案 1 :(得分:0)

解决方案是这样的:

fun joinOptions(options: Collection<String>) = options.joinToString(
    prefix = "[",
    separator = ", ",
    postfix = "]"
)