分享

一个奇怪的scala 语句

scala 发表于 2015-3-12 21:50:23 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 7 15774
有如下2个foreach  循环,代码基本类似

object HellWord {
  def main(args: Array[String]): Unit = {
    val s = "0,1,2,3,4"
    var j= 0
    val s1 = s.split(",").filter(_.trim.nonEmpty).foreach {
      j = j + 1
      println( _, j)
    }

    println("----")
    j = 0
    val s2 = s.split(",").filter(_.trim.nonEmpty).foreach {
      item =>
        {
          j = j + 1
          println(item, j)
        }
    }
但是运行结果
第1个j 没有变化始终是1
第2个j变化了依次递增1
那我能帮我解释下
执行结果如下:

QQ图片20150312214610.png


已有(7)人评论

跳转到指定楼层
desehawk 发表于 2015-3-12 23:48:31
这个还真不太好懂。应该是item 函数的作用。

val s = "0,1,2,3,4"
    var j= 0
    val s1 = s.split(",").filter(_.trim.nonEmpty).foreach {
      j = j + 1
      println( _, j)
    }

    println("----")
    j = 0
    val s2 = s.split(",").filter(_.trim.nonEmpty).foreach {
      item =>
        {
          j = j + 1
          println(item, j)
        }
和返回值和for循环有关系
关于for循环,楼主参考下,希望对楼主有所帮助
scala初学--控制语句


回复

使用道具 举报

arsenduan 发表于 2015-3-13 01:10:48
在第一个例子中,你的大括号里面的东西是一个block,执行的时候先把j加了1,然后返回了一个函数,println(_, j)。第二个例子则整个是一个函数


因为那个大括号只执行了一次,把j加了一,foreach执行的是println的那个函数

回复

使用道具 举报

jixianqiuxue 发表于 2015-3-13 01:11:19
val f : String => Unit = {x => println(x, 1)}; s.split(",").foreach(f)和这个等价
回复

使用道具 举报

desehawk 发表于 2015-3-13 01:14:15
参考这个帖子,对楼主的理解,应该有帮助
Scala中的call-by-name与call-by-value
回复

使用道具 举报

scala 发表于 2015-3-13 09:58:48
谢谢以上各位的回复,理解了!
回复

使用道具 举报

xuanxufeng 发表于 2015-3-13 11:17:55
object HellWord {
  def main(args: Array[String]): Unit = {
    val s = "0,1,2,3,4"
    var j= 0
    val s1 = s.split(",").filter(_.trim.nonEmpty).foreach {
      j = j + 1
      println( _, j)
    }
这里j=j+1;只被执行了一次,后面循环调用 println( _, j),但是j始终是1
    println("----")
    j = 0
    val s2 = s.split(",").filter(_.trim.nonEmpty).foreach {
      item =>
        {
          j = j + 1
          println(item, j)
        }
    }
这里item是一个函数,j=j+1;被执行了多次



回复

使用道具 举报

feng01301218 发表于 2015-3-14 18:02:23
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条