zoukankan      html  css  js  c++  java
  • Scala中 => Unit 与 () =>Unit的区别

    () => Unit ---> 是一个函数;
    => Unit --> 是一个执行结果为Unit的表达式

    code: => Unitby name 传递参数。参数是一个返回值为Unit的代码块。在传递的时候,参数没有被调用。比如:

    def test(code : => Unit){  
      println("start")  
      code // 这行才会调用传入的代码块,写成code()亦可  
      println("end")  
    }  
    test{// 此处的代码块不会马上被调用  
      println("when evaluated")  
      println("bb")   
    }

    结果

    start 
    when evaluated 
    bb 
    end

    注意:when evaluated被打印在了startend中间。

    code: ()=>Unit参数的类型,是一个没有参数而且返回值为Unit的函数类型。

    def test1(code: ()=>Unit){  
      println("start")  
      code() // 要想调用传入的代码块,必须写成code(),否则不会调用。  
      println("end")  
    }  
    test1 {//此代码块,传入后立即执行。  
    println("when evaluated")  
    ()=>{println("bb")}  
    }

    结果:

    when evaluated 
    start 
    bb 
    end

    注意:when evaluated被打印在了start之前。

    实际上,在第二例当中,test1的参数是一个表达式。在Scala中,如果将要传入的参数正好是一个,则可以用花括号。这时候test1的参数列表是一个表达式,而这个表达式的结果是最后一行的返回,也就是一个函数() => { println("bb") },它被传给了test1的唯一参数。然后test1方法体执行。至于为什么when evaluated在另外三行之前,是因为它是在传参的时候,求表达式值的副产物。

    其实code :=> Unit就是code : () => Unit,只是第一种是按传参,用花括号可以把花括号内的所有东西作为一个函数传给code;第二种就是普通传参,但是它刚好只有一个参数。这时候用了花括号,就是花括号内表达式的值传进去了。

    最后,提供对等用例

    object FunctionTest2 {  
      def main(args: Array[String]) {  
        def test(code: => Unit) {  
          println("start")  
          code   
          println("end")  
        }  
        test {   
          println("when evaluated")  
          println("bb")  
        }  
    
        def test1(code: () => Unit) {  
          println("start")  
          code()    
          println("end")  
        }  
        test1 {   
          () =>  
          println("when evaluated")  
          println("bb")  
        }  
      }  
    }
  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/itboys/p/10310649.html
Copyright © 2011-2022 走看看