scala - foreach(println) 和 foreach(println()) 有什么区别?
问题描述
我有一个字符串数组:
val str:Array[String] = Array("aa","bb")
scala> str.foreach(println) // works
aa
bb
scala> str.foreach(println()) // println() also returns a Unit, doesn't it?
^
error: type mismatch;
found : Unit
required: String => ?
为什么str.foreach(println)
工作没有问题,但str.foreach(println())
没有?
不println
等于println()
which 返回一个Unit
值吗?
解决方案
println
是一种方法(可转换为函数),它接受输入(String
在这种情况下)并产生结果(Unit
)和副作用(打印到 StdOut)。
println()
是一个不接受输入的方法的调用,产生一个结果(Unit
)和一个副作用(\n
到 StdOut)。
他们不一样。
第二个在 a 中不起作用,foreach()
因为foreach()
将元素(在这种情况下为字符串)提供给它的参数,并且println()
不会接受foreach()
提供它的输入。
这将起作用str.foreach(_ => println())
,因为下划线箭头 ( _ =>
) 表示:“忽略输入。只需将其丢弃并调用以下内容。”
推荐阅读
- android - 在 Flutter 内部,将大文件从 Assets 文件夹复制到 Application Documents 文件夹
- c# - 将自定义面板添加到 FlowLayoutPanel
- javascript - jQuery滚动到另一个页面中的一个部分
- visual-studio - Visual Studio 2017:对项目的引用损坏 (CS0006)
- r - 使用 chartSeries 中的 addPoints 功能
- mysql - MySQL ERD 检查
- javascript - 如何实现基于多镜头定界延续的协程?
- javascript - 用 Spotify 理解 Oauth2
- python - 电报上的超级组规则
- php - Laravel groupBy 然后返回一个计数最高的结果