Lai*_*uan 9 scala type-inference
我在Scala中听到我可以_在匿名函数中用作"匿名参数":
List(1,2,3).foreach(print(_))
Run Code Online (Sandbox Code Playgroud)
但是这段代码无法编译:
scala> def a[T](s: Seq[T]): Seq[T] = s.map(_)
<console>:7: error: missing parameter type for expanded function ((x$1) => s.map(x$1))
Run Code Online (Sandbox Code Playgroud)
这可以:
scala> def a[T](s: Seq[T]): Seq[T] = s.map(x => x)
a: [T](s: Seq[T])Seq[T]
Run Code Online (Sandbox Code Playgroud)
似乎是类型推断.但是怎么能x => x提供更多的信息_呢?
sen*_*nia 14
这里的问题不是类型推断.
正如您从错误消息中看到的等效代码s.map(_)不是s.map(x => x),但是这样:
i => s.map(i)
Run Code Online (Sandbox Code Playgroud)
就像print(_)(实际Predef.print(_))意味着i => Predef.print(i).
或类似"a" + _手段"a".+(_)的手段s => "a".+(s).
这在当前的背景下没有意义.
假设您有一个函数列表String => String(fs),并且您希望将所有这些函数应用于列表String.你将使用这段代码:
fs.map{f => s.map(f)}
Run Code Online (Sandbox Code Playgroud)
或者只是这样:
fs.map{s.map(_)}
Run Code Online (Sandbox Code Playgroud)
另外:如果你可以使用identity方法x => x.它是默认导入的,但您可以使用添加导入使其更短:
import Predef.{identity => id}
List(1, 2, 3) map id
// List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
请注意,这identity是一个众所周知的名称,因此在团队中您应该使用它而不是别名.
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |