acj*_*jay 22
它只是身份函数的一个实例,为了方便而预先定义,也许是为了防止人们在很多时候自己重新定义它.identity只需返回其参数.有时候传递给更高阶的函数会很方便.你可以这样做:
scala> def squareIf(test: Boolean) = List(1, 2, 3, 4, 5).map(if (test) x => x * x else identity)
squareIf: (test: Boolean)List[Int]
scala> squareIf(true)
res4: List[Int] = List(1, 4, 9, 16, 25)
scala> squareIf(false)
res5: List[Int] = List(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我也看到它有时用作默认参数值.显然,你可以说x => x任何你可能会使用的地方identity,你甚至可以节省几个角色,所以它不会给你带来太大的收获,但它可以自我记录.
除了已经提到的acjay之外,Identity函数与隐式参数一起使用非常有用.
假设你有这样的功能:
implicit def foo[B](b: B)(implicit converter: B => A) = ...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当B <:A的某个实例作为函数第一个参数传递时,Identity函数将用作隐式转换器.
如果您不熟悉隐式转换以及如何使用隐式参数来链接它们,请阅读:http://docs.scala-lang.org/tutorials/FAQ/chaining-implicits.html
| 归档时间: |
|
| 查看次数: |
9428 次 |
| 最近记录: |