减少具有功能组成的样板

Yan*_*san 0 scala

我有以下代码:

def a = f(aa)
def b = f(bb)
def c = f(cc)
def d = f(dd)
Run Code Online (Sandbox Code Playgroud)

是否有解决方案来删除样板,即显式调用 f

Kri*_*ala 6

您可以使用标准库执行以下操作:

val List(a,b,c,d) = List(aa,bb,cc,dd).map(f)
Run Code Online (Sandbox Code Playgroud)

它使用模式匹配来分配左侧的值,如果两个Lists的长度不同,则会在运行时失败.

Scalaz有一个更安全的类型选项,它使用元组来确保左边和右边的值的数量是相同的(在编译时检查):

import scalaz._, Scalaz._
val (a,b,c,d) = (aa,bb,cc,dd).map(f)
Run Code Online (Sandbox Code Playgroud)