Predef.identity在scala中做了什么?

时间:2015-02-09 10:21:59

标签: scala

Here是关于Predef的文档,但没有关于身份的说法。这个功能用于什么?它的作用是什么?

2 个答案:

答案 0 :(得分:21)

它只是identity function的一个实例,为了方便而预先定义,也许是为了防止人们自己重新定义它一大堆。 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)

我也看到它有时用作默认参数值。显然,您可以在任何可能使用x => x的地方说identity,并且您甚至可以保存几个字符,因此它不会给您带来太多收益,但它可以自我记录。< / p>

答案 1 :(得分:6)

除了acjay已经提到的内容之外,Identity函数与隐式参数一起使用非常有用。

假设你有这样的功能:

implicit def foo[B](b: B)(implicit converter: B => A) = ...

在这种情况下,当B&lt;:A的某个实例作为函数第一个参数传递时,Identity函数将用作隐式转换器。

如果您不熟悉隐式转换以及如何使用隐式参数来链接它们,请阅读:http://docs.scala-lang.org/tutorials/FAQ/chaining-implicits.html