【发布时间】:2019-02-01 21:46:44
【问题描述】:
Passing a lambda to the last parameter
在 Kotlin 中,有一个约定,如果 a 的最后一个参数 function 接受一个函数,一个 lambda 表达式,作为 相应的参数可以放在括号外:
val product = items.fold(1) { acc, e -> acc * e }
这个语法的目的是什么?
【问题讨论】:
-
提示:你看过
fold的函数定义或者理解它的作用吗? -
@cricket_007 我认为这个问题与代码的工作方式无关,而是与语法的动机有关。 vkelman,请查看kotlinlang.org/docs/reference/type-safe-builders.html 的一些 Kotlin 代码,这些代码广泛利用将 lambda 置于括号之外的能力来创建(在我看来)非常好的 dsl。
-
@SpencerPark 虽然,是的,这些块也适用于 DSL,但我不确定这就是问题所在。关于
fold()显式,第二个参数是一个函数(acc: R, nextElement: T) -> R- kotlinlang.org/docs/reference/lambdas.html -
@cricket_007 该示例是从参考文档中逐字提取的,但问题是“此语法的目的是什么?”。这看起来像是一个关于语言设计的问题,但我们必须让 vkelman 澄清这一点。
-
好吧,我明确询问了这种(让我感到困惑)语法的目的是什么。我没有问折叠在做什么。我得到的答案 - 它允许使用 DSL。在我看来,通常那些旨在美化语言的语法糖实际上会使代码更难理解。