• scala -- 传名参数


    object Test{
      def main(args: Array[String]): Unit = {
    
        def test(code : => Unit){// 传名参数 不计算函数值,而是把函数当作一个整体传进去,在test内部运行该参数函数
          println("start")
          code
          println("end")
        }
        test{
          println("when evaluated")
          println("bb")
        }
        //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
        def test1(code: ()=>Unit){ // 普通的传参,也就是传值参数  首先计算参数函数的结果,然后把结果传给test1 函数。
          println("start")
          code() //必须带() 不然不会调用
          println("end")
        }
        test1 {
          println("when evaluated")
          ()=>{println("bb")}
          println("haha")
        }
      }
    
    }
    
    /* 如下为某个人分析的结果
    
    Scala没有什么代码块的概念。这个例子我也看了半天,实际上,在第二例当中,test1的参数是一个表达式。在Scala中,如果将要传入的参数正好是一个,则可以用花括号。这时候test1的参数列表是一个表达式,而这个表达式的结果是最后一行的返回,也就是一个函数() => { println("bb") },它被传给了test1的唯一参数。然后test1方法体执行。至于为什么when evaluated在另外三行之前,是因为它是在传参的时候,求表达式值的副产物。
    其实code :=> Unit就是code : () => Unit,只是第一种是按名传参,用花括号可以把花括号内的所有东西作为一个函数传给code;第二种就是普通传参,但是它刚好只有一个参数。这时候用了花括号,就是花括号内表达式的值传进去了
    */
    // 上面这个例子是  http://scalagroup.group.iteye.com/group/topic/26303  这个地方来的。。
    
  • 相关阅读:
    将博客搬至CSDN
    java面试题(一)
    大数据面试题(二)
    大数据面试题(一)
    现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
    java序列化与反序列化总结
    Hashmap,Set,Map,List,ArrayList的区别
    Windows下安装Scrapy
    Eclipse java上手
    lucene文件检索(1)-linux java环境配置
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7220296.html
Copyright © 2020-2023  润新知