加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

[Scala基础]--call by name和call by value的区别

发布时间:2020-12-16 09:38:55 所属栏目:安全 来源:网络整理
导读:scala版本:scala-2.10.5 一、前言 这里涉及到Scala的匿名函数、高阶函数、闭包和Jvm相关的知识,有关内容请查阅这本pdf书籍: Scala Cookbook - Recipes for Object-Oriented and Functional Programming_Alvin Alexander_2013 在Spark的源码中,大量使用ca

scala版本:scala-2.10.5

一、前言

这里涉及到Scala的匿名函数、高阶函数、闭包和Jvm相关的知识,有关内容请查阅这本pdf书籍:

Scala Cookbook - Recipes for Object-Oriented and Functional Programming_Alvin Alexander_2013

在Spark的源码中,大量使用call by name调用,减少了函数的调用次数,大大提高了软件性能。

二、举例

  • func():返回值是Int,没有参数
  • callByValue(x:Int):返回值是Unit,传入Int类型的值
  • callByName(x:=>Int):返回值是Unit,传入的是一个匿名函数(该函数传入的参数为空,返回值是Int)

def func(): Int ={
    println("Compute some stuff...")
  23 // return value
}

def callByValue(x:Int)={
  println(s"1 first : $x ")
  println(s"2 second : $x ")
}

def callByName(x: => Int)={
  println(s"1 first : $x ")
  println(s"2 second : $x ")
}

test("201852314:16:30 测试call by name call by value的区别"){
  callByName(func())
  println("---------------------------------")
  callByValue(func())
}

运行结果:

/*
 * Testing started at 14:31 ...
 * Compute some stuff...
 * 1 first : 23 
 * Compute some stuff...
 * 2 second : 23 
 * ---------------------------------
 * Compute some stuff...
 * 1 first : 23 
 * 2 second : 23 
*/

现象:

1、callByName:func()被调用了1次

2、callByValue:func()被调用了2次

区别:

1、call-by-name:在调用函数之前计算的,仅在需要时才进行计算

2、call-by-value:在调用函数时计算的,每次都需要计算。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读