zoukankan      html  css  js  c++  java
  • scala 传值调用,传名调用

    Scala的解释器在解析函数参数(function arguments)时有两种方式:

    • 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部;
    • 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部

    在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。

    传名调用时, 接受表达式的形参定义一般是: block: =>Unit   , 没有形参,返回类型Unit 

    demo:


    def test(code: => Unit) {
    println("start")
    code
    println("end")
    }

    def test1(code: () => Unit) {
    println("start")
    code()
    println("end")
    }

    //开始测试

    test {
    println("when evaluated")
    println("bb")
    }

    println(".................")

    test1 {
    println("bb")
    () => println("when evaluated")
    }

    结果:

    start
    when evaluated
    bb
    end
    .................
    bb
    start
    when evaluated
    end
    

      

      

  • 相关阅读:
    2019.9.4 二维树状数组
    2019.9.4 简单题
    0052-YH的计算器
    0051-打乱顺序的三位数
    0050-计算天数
    0049-学校的上网费
    0048-三角形的判断
    0047-月份转换
    0046-简单的分段函数(二)
    0045-简单的分段函数(一)
  • 原文地址:https://www.cnblogs.com/snow-man/p/13156231.html
Copyright © 2011-2022 走看看