通常 函数/方法 的参数是传值参数,也就是说,参数的值在传递给函数之前已经确定好了。而在Scala中,方法或函数的参数可以是一个表达式,也就是可以将一个代码逻辑传递给某个方法或着函数。(这有点像C语言)

分别有两种调用方式:

1.Scala的传值调用(call-by-value),参数是一个或多个类型的变量

2.Scala的传名调用(call-by-name),参数传的是函数/方法名,即函数/方法(一段逻辑)

二话不说,直接上一个代码(课程Demo)来说明:

object CallByNameAndValue {//钱包总金额var money=100//每次扣5元def huaQian():Unit={money=money-5}//数数每次扣完剩多少钱def shuQian():Int={huaQian()  //调用方法money     //返回值}//方法printByValue的参数是一个Int类型的变量def printByValue(x:Int)={for (a<- 0 until 3) { //0,1,2println(s"测试: ${x}元")}}//方法printByName的参数是一个无参,返回值为Int类型的函数(x: => Int 表示的是一个方法的签名)def printByName(x: => Int)={for(b<- 0 to 3) {  //0,1,2,3println(s"每次都算算还剩: ${x}元")//该方法无返回值,直接在方法体输出结果}}def main(args: Array[String]): Unit = {// 传值调用:传给方法的是一个确定的值printByValue(shuQian()) //传入的是shuQian()计算后返回的一个确定值// 传名调用:传的是一段逻辑// 将shuQian方法名称传递到printByName方法的内部执行printByName(shuQian())}
}

结果:

//传值调用
测试: 95元
测试: 95元
测试: 95元//传名调用
每次都算算还剩: 95元
每次都算算还剩: 90元
每次都算算还剩: 85元
每次都算算还剩: 80元

再看一个:

object Calculate {//add方法有3个参数:第1个参数是拥有两个Int类型参数、返回值为Int的函数//该方法的返回值为Intdef add(f:(Int,Int)=>Int,a:Int,b:Int):Int={f(a,b)   //方法体功能是调用这个带参函数变量,传入方法参数变量}//定义一个函数,有2个Int类型参数,且返回值为参数相乘结果val fa:(Int,Int)=>Int=(a,b)=>a*b//add1方法有2个参数:第一个参数是拥有一个Int类型、返回值为Int的函数//可以不写返回值类型,编译器可自动推测def add1(c:Int =>Int,d:Int)={c(d)*d  //方法功能是调用函数变量,传入方法参数并与参数相乘}//定义一个拥有1个参数的函数// val c:Int=>Int=e=>e*5val c=(e:Int)=>e*5def main(args: Array[String]): Unit = {//调用add方法val res1=add(fa,2,3) //f(2,3)-> 2*3=6println(res1)//调用add1方法val res2=add1(c,3) //c(3)*c -> 3*5*3=45println(res2)}}

总结:函数可以作为一个方法的参数进行传递。

Scala的传值调用与传名调用理解相关推荐

  1. scala函数参数的传递:传值调用和传名调用

    函数参数的传递有两种:传值调用和传名调用 传值调用:先计算参数表达式的值,再应用到函数内部 传名调用:将未计算的参数表达式直接应用到函数内部 object Add{def addByName(a: I ...

  2. 传值调用,传名调用,引用调用,复制恢复

    传值调用,传名调用,引用调用,复制恢复 例1 1 传值调用 2 引用调用 --传地址引用 3 复制恢复 4 传名调用 例2 例1 程序运行时的存储空间组织如图7-1所示. 其中代码区用于存放目标程序代 ...

  3. scala传值调用和传名调用

    代码: 传值调用: 先计算balance的值 把这个值作为参数传递给printmoney 传名调用:传递的是函数 将balance方法的名称传递到方法内部 传值调用: object ZFBToPay ...

  4. Scala 传值调用和传名调用

    传值调用时,参数只在调用时计算一次,后续重复使用计算的结果 传名调用时,参数在调用时不会计算,只有真正用到参数的时候才会计算(x:=> Int) object ScalaFunction {va ...

  5. 简单了解函数的传值调用与传址调用(C语言)

    一.首先需要引入函数中的实际参数与形式参数 实际参数(实参)是指真实传给函数的参数.实参可以是常量.变量.表达式.函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值 ...

  6. JavaScript 是传值调用还是传引用调用?

    1. 例子 先来看两个个来自于 <JavaScript 高级程序设计>P70-P71 的两个例子. 1.1. 基本类型参数传递 function addTen(num) {num += 1 ...

  7. Java中的形参和实参的区别以及传值调用和传引用调用

    名词解析: 1.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效. 2.实参:传递给被调用方法的值,预先创建并赋予确定值. 3 ...

  8. 函数学习笔记(一) 传值调用、传址调用.

    前言  函数是程序的一个子程序,自己定义的函数与主函数的地位·相同. 函数分为: 库函数.自定义函数 一.库函数 在学习函数之前我们就有接触到了函数--库函数 比如说printf.scanf.getc ...

  9. 【 C 】函数参数通过传值调用还是传址调用?

    C 函数的所有参数均以 "传值调用" 方式进行传递,这意味着函数将获得参数值的一份拷贝.这样函数就可以放心修改这个拷贝值,而不必担心会修改调用程序实际传递给它的参数. 既然调用函数 ...

最新文章

  1. 运用Kubernetes进行分布式负载测试
  2. SEO优化倦怠期?SEO排名和收录都不错时,到底还需不需要日更?
  3. java实现一个单例设计模式_Java正确实现一个单例设计模式的示例
  4. esxi服务器接移动硬盘,esxi添加usb移动硬盘存储数据
  5. MonkeyFest2018 微软最有价值专家讲座
  6. 二分图判断(交叉染色)
  7. DOM增删操作(创建删除表格)
  8. 北京黄记煌餐饮管理有限责任公司签约Ebistrategy亦策软件
  9. 全网最全-Java简历优化-专业技能
  10. catia设计树_在CATIA目录树上**零件号原来这么简单!
  11. 英语词根研究和单词记忆
  12. 183名中国学者入选2016全球高引作者榜 | 数据分析
  13. pq分解法matlab编程,基于matlab的pq分解法电力系统潮流计算.pdf
  14. windows10 C:\windows\system32\winlogon.exe自动关机
  15. R语言安装NLP自然语言分析包
  16. 机器人莫麟_国内机器人/机甲动画汇总——2013年
  17. CSMA/CD协议详解!!!
  18. win10触控平板 如何禁掉IE10的手势控制
  19. 如何查看wifi设备
  20. 咸鱼软件应用—ubuntu切换中文

热门文章

  1. adb shell命令
  2. android用讯飞实现TTS语音合成 实现中文版
  3. gulp-rev 添加版本号
  4. 计算机毕业设计springboot驾校学员管理系统w42sj源码+系统+程序+lw文档+部署
  5. 【计算机毕业设计】基于微信小程序的流浪动物救助系统 动物领养系统
  6. Matlab 统计数组中各元素出现的频数、频率
  7. Cisco VPP:cop简介
  8. 【重要程序】判断闰年
  9. 2019海西汽博会车展看点,豪车美女黑科技引爆全场
  10. 【设计模式】之抽象工厂模式详解与应用(三)