很难理解
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:B部分中的 it 是什么?此 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!
答案 0 :(得分:1)
是的,it
是StringBuilder
。默认情况下,它的名称为it
。您可以根据需要指定名称。
buildString {
it.append("...")
}
与
相同buildString { it ->
it.append("...")
}
甚至
buildString { myNewString ->
myNewString.append("...")
}
答案 1 :(得分:1)
在B节中仅传递一个参数,即该参数:
{
it.append("Hello, ")
it.append("World!")
}
那是一个 lambda表达式,而不是两个。 lambda表达式有2个行,但它仍然是一个lambda。
如果要将通话扩展到buildString
,
val builder = StringBuilder()
builder.append("Hello, ")
builder.append("World!")
val s = builder.toString()
是的,it
是指StringBuilder
中的sb
buildString
。如果函数类型只有一个参数,则可以在lambda表达式中使用it
引用单个参数,而无需为其命名。
答案 2 :(得分:1)
1:有趣的buildString在A节中仅接受一个lambda参数,为什么在B节中传递了两个参数?
只有1个参数传递给该函数:具体地说,类型为builderAction
的{{1}}。
所以
(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
。