你好,游客 登录
背景:
阅读新闻

Scala面试题:call-by-value和call-by-name求值策略的区别?

[日期:2018-09-15] 来源:jianshu  作者:IIGEOywq [字体: ]

(1)call-by-value是在调用函数之前计算;
(2) call-by-name是在需要时计算

示例代码

//声明第一个函数
def func(): Int = {
  println("computing stuff....")
  42 // return something
}
//声明第二个函数,scala默认的求值就是call-by-value
def callByValue(x: Int) = {
  println("1st x: " + x)
  println("2nd x: " + x)
}
//声明第三个函数,用=>表示call-by-name求值
def callByName(x: => Int) = {
  println("1st x: " + x)
  println("2nd x: " + x)
}

//开始调用

//call-by-value求值
callByValue(func())   
//输出结果
//computing stuff....  
//1st x: 42  
//2nd x: 42

//call-by-name求值
callByName(func())   
//输出结果
//computing stuff....  
//1st x: 42  
//computing stuff....
//2nd x: 42


作者:IIGEOywq
链接:https://www.jianshu.com/p/ace2bb24dc11
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
收藏 推荐 打印 | 阅读: