zoukankan      html  css  js  c++  java
  • 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  这个地方来的。。
    
  • 相关阅读:
    前端入门21-JavaScript的ES6新特性
    redis 数据库安装和基本使用
    django 与 Vue 的结合使用说明
    websocket 与 tornado 的结合
    tornado 模板引擎
    tornado 初解
    ajax post 提交数据和文件
    Session Cookies随笔
    爬虫 scrapy 笔记
    绘制验证码 刷新验证码
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/7220296.html
Copyright © 2011-2022 走看看