[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调用,减少了函数的调用次数,大大提高了软件性能。
二、举例
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("2018年5月23日14: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:在调用函数时计算的,每次都需要计算。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |