减少具有功能组成的样板

时间:2014-02-10 21:05:32

标签: scala

我有以下代码:

def a = f(aa)
def b = f(bb)
def c = f(cc)
def d = f(dd)

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

2 个答案:

答案 0 :(得分:6)

您可以使用标准库执行类似的操作:

val List(a,b,c,d) = List(aa,bb,cc,dd).map(f)

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

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

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

答案 1 :(得分:1)

您可以使用隐式: http://docs.scala-lang.org/overviews/core/implicit-classes.html

val aa: Int = 1

// Let's say that your function f returns instance of C
def f(x: Int): C = ???

implicit class C(in: Int) {
  // Do whatever you need here ...
}

def a: C = aa