在 Scala 中,我倾向于编写大型链式表达式,而不是许多带有val
赋值的较小表达式。在我的公司,我们已经为这种类型的代码发展了一种风格。这是一个完全人为的例子(想法是显示一个包含大量链接调用的表达式):
import scala.util.Random
val table = (1 to 10) map { (Random.nextInt(100), _) } toMap
def foo: List[Int] =
(1 to 100)
.view
.map { _ + 3 }
.filter { _ > 10 }
.flatMap { table.get }
.take(3)
.toList
Daniel Spiewak 的Scala Style Guide (pdf),我通常喜欢它,它表明链式方法调用中的前导点表示法可能不好(参见文档:方法调用/高阶函数),尽管它不包括多行表达式直接这样。
是否有另一种更被接受/惯用的方式来编写foo
上面的函数?
更新:2011 年 6 月 28 日
下面有很多很棒的答案和讨论。似乎没有 100% 的“你必须这样做”的答案,所以我将通过投票接受最受欢迎的答案,这是目前的理解方法。就个人而言,我认为我现在将坚持使用前导点符号并接受随之而来的风险。