android - 如何理解 Kotlin 中有趣的 buildString(builderAction: (StringBuilder) -> Unit) : String?
问题描述
我觉得很难理解。
1:fun buildString
A节只接受一个lambda参数,为什么B节传了两个参数?
2:B节的完整代码是什么?
如
val s = buildString { aa : StringBuild -> aa.append("Hello.") } // I don't know whether it's right?
3:it
B 部分的内容是什么?这it
代表StringBuild
吗?
A节
fun buildString(builderAction: (StringBuilder) -> Unit ) : String {
val sb = StringBuilder()
builderAction(sb)
return sb.toString()
}
B节
val s = buildString {
it.append("Hello, ")
it.append("World!")
}
logError(s) //The result is Hello, World!
解决方案
1:fun buildString在A节只接受一个lambda参数,为什么在B节传了两个参数?
只有 1 个参数传递给该函数:特别builderAction
是 type (StringBuilder) -> Unit
。
所以
val s = buildString {
it.append("Hello, ")
it.append("World!")
}
相当于
val s: String = buildString(builderAction = { stringBuilder: StringBuilder ->
stringBuilder.append("Hello, ")
stringBuilder.append("World!")
// return Unit
})
含义it
实际上是 的未命名的单个参数(StringBuilder) -> Unit
,所以它是一个StringBuilder
.
推荐阅读
- html - 为什么这个基本的 HTML 代码不能正常工作
- git - 合并同一个项目的两个git仓库,链接文件历史
- pandas - 如何防止 pandas resample 重新采样 id 列
- javascript - 如何从 webpack 加载器访问 DOM
- python - How to print first channel of the filter?
- xamarin.forms - How To: Hide Page NavigationBar in Prism/Xamarin Forms
- emacs - Error with Kieran Healy's emacs starter kit
- paypal - PayPal Recurring Payments - Are Billing Plans meant to have multiple Billing Agreements?
- javascript - 在不广播 Clients.All.someMethod() 和炸毁客户端资源的情况下确定 Signal R 连接状态
- git - Merging a Merge request from command line in GitLab