kotlin - Kotlin Koans:命名参数解决方案
问题描述
我正在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]
所以我只是好奇我是否遗漏了什么?- 他们在这个问题上的目的是什么?
解决方案
println(collection)
调用对象toString()
上的方法Collection
,一些集合会以如下格式打印它们的内容:
[1, 2, 3]
这确实相当于调用
collection.joinToString(prefix = "[", delimiter = ", ", postfix = "]")
但是,您无法修改此行为,因此,例如,如果您想将集合中的每个元素打印在单独的行上,您必须编写自己的toString()
. 这是joinToString()
派上用场的地方,您可以这样做
collection.joinToString(delimiter = "\n")
请注意,您不需要传递参数prefix
或postfix
使默认值适合您的用例。
Koans 示例可能不那么令人困惑,但它确实说明了命名参数和默认值的用法。
推荐阅读
- apache-httpclient-4.x - 是否需要 Commons 组件 HttpClient IdleConnectionMonitorThread?
- mysql - Mysql触发器乘以复制到另一个表
- go - 运行 go 应用程序时出现 VS Code 错误
- algorithm - 这种递归关系的伪代码是什么
- java - 如何在一段时间内打破 if 链 .. do ...loop?
- python - 奇怪的,随机定时的抓取错误
- c - pthread_cancel() 是否有可能终止另一个意外线程?
- julia - 使用 DataFrame 在 Julia 中生成 15000 行 x 37 列的表的问题
- angular - 如何更改 ng2 图表中的 x 轴标签
- r - 为什么 tidyr::crossing 排序向量?