为什么Scala不能推断_的类型?
发布时间:2020-12-16 09:01:11 所属栏目:安全 来源:网络整理
导读:我在 Scala中听说我可以在匿名函数中使用_作为“匿名参数”: List(1,2,3).foreach(print(_)) 但是这段代码无法编译: 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))
我在
Scala中听说我可以在匿名函数中使用_作为“匿名参数”:
List(1,2,3).foreach(print(_)) 但是这段代码无法编译: 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)) 这可以: scala> def a[T](s: Seq[T]): Seq[T] = s.map(x => x) a: [T](s: Seq[T])Seq[T] 似乎是类型推断.但是怎么可能x => x提供的信息比_更多? 解决方法
这里的问题不是类型推断.
正如您从错误消息中看到的,s.map(_)的等效代码不是s.map(x => x),但是这样: i => s.map(i) 就像print(_)(实际上是Predef.print(_))意味着i => Predef.print(i)中. 或者像“a”_表示“a”. (_)表示s => “一个”. (S). 这在当前的背景下没有意义. 假设你有一个函数列表String =>字符串(fs),您想要将所有这些函数应用于String列表.你将使用这段代码: fs.map{f => s.map(f)} 或者只是这样: fs.map{s.map(_)} 增加:如果x =>您可以使用身份方法X.它是默认导入的,但您可以使用添加导入使其更短: import Predef.{identity => id} List(1,3) map id // List[Int] = List(1,3) 请注意,身份是一个众所周知的名称,因此在团队中您应该使用它而不是别名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |