传名函数与传值函数

编译原理——参数传递—传名、传地址、得结果、传值 这个传参方式不太好理解,就是P(X,Y,Z),P函数内部还是对局部变量进行操作,和传值一样,但是需要多一步操作,就是把形参X,Y,Z值传给主函数的实参(A+B,A,A),也就是执行完P函数的X的值赋给A+B,Y的值赋给A,Z的值也赋给A,注意A有两次赋值操作,那么后赋值的会覆盖之前的,所以A的取值就是Z的值,而不是Y的值;X、Y、Z的操作当成局部变量来做(当成传值来做),最后对应着把形参的值赋给实参,后赋值的覆盖之前的; 阅读详情

Scala的解释器在解析函数参数(function arguments)时有两种方式:先计算参数表达式的值(reduce the arguments),再应用到函数内部;或者是将未计算的参数表达式直接应用到函数内部。前者叫做传值调用(call-by-value),后者叫做传名调用(call-by-name)。

传值函数和传名函数

object Add {
def addByName(a: Int, b: => Int) = a + b
def addByValue(a: Int, b: Int) = a + b
}

传名函数和传值函数在编译器中区别:
addByName(2, 2 + 2)
->2 + (2 + 2)
->2 + 4
->6

addByValue(2, 2 + 2)
->addByValue(2, 4)
->2 + 4
->6

可以看出,在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。

这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。对于有副作用(side-effect)的参数来说,这无疑造成了两种调用方式结果的不同。

因此, 在实际的使用中:
传值调用在进入函数体之前就对参数表达式进行了计算,这避免了函数内部多次使用参数时重复计算其值,在一定程度上提高了效率。

但是传名调用的一个优势在于,如果参数在函数体内部没有被使用到,那么它就不用计算参数表达式的值了。在这种情况下,传名调用的效率会高一点。

package Demo
//传名和传值参数
object Demo01 extends App {

  def time()={

    println("获取时间,单位为毫秒")
    System.nanoTime()//时间毫秒

  }


//传值调用,直接获取参数名中的值放入主函数中    传值调用(call-by-value)
  def delayed(t:Long) ={

    println("在delayed方法内")

    println("参数为"+t)

  }

//  获取时间,单位为毫秒
//  在delayed方法内
//  参数为10874963211520
delayed(time())


//传名调用当遇到参数名的时候 计算参数名中的逻辑    传名调用(call-by-name)
  def delayedd(t : =>Long) = {

    println("在delayed方法内")

    println("参数为" + t)
  }
//
//  在delayed方法内
//  获取时间,单位为毫秒
//  参数为11088250581065

  delayedd(time())

  }
银河麒麟V10SP1实战:5步搞定AD域登录(附Samba+Winbind配置详解) 本文提供银河麒麟V10 SP1操作系统无缝集成Windows AD域的实战指南。文章深入解析了Samba、Winbind与Kerberos三大核心组件的协作原理,并详细阐述了从环境准备、软件包安装、配置文件定制到执行加域及排错的全流程。特别针对2403等新版本提供了关键配置差异与避坑要点,旨在帮助企业运维人员实现高效、稳定的域环境登录与管理。 阅读详情

相关推荐

从内参矩阵到归一化平面:揭秘相机成像的标准化核心

本文深入解析了相机成像中的核心概念——归一化平面。通过拆解内参矩阵(包含焦距、主点等参数)的作用,详细阐述了如何将像素坐标转换为与具体相机硬件无关的归一化坐标。这一标准化过程是计算机视觉算法(如多相机系统对齐、视觉SLAM)实现跨设备通用性的关键,能有效提升算法的鲁棒性和泛化能力。

opencv7vision的博客 449

函数名传递与名称空间

1.关键字参数(了解即可)# 命名关键字参数:在函数定义阶段 写在*与**可变长参数之间的形参# 在给命名关键字参数传值的时候 只能用关键字为其传值# 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错# 其实z和m都是命名关键字参数 不是默认值参数和位置参数def func(x, y=1, *args, z=3, m, **kwargs): prin...

dianxi1148的博客 383

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 304

scala之十种函数高级应用

函数高级应用 主要包含10种函数高级应用, 函数传名调用 指定函数参数名调用 可变参数的函数 默认参数值函数 递归函数 高阶函数 内嵌函数 匿名函数 偏应用函数 函数柯里化 函数传名调用 o概念说明 传值调用:先计算参数表达式的值,再应用到函数内部,把=>去掉即可,即按原始的方式 传名调用:将未计算的参数表达式直接应用到函数内部,用=>来设置...

findzk的博客 1322

绝对旋转编码器学习笔记(基本原理,与PC通信等,不定期更新中)

前言 最近开始学习编码器相关内容,目的在于搞清楚编码器的原理,与上位机的联系等问题。笔记资料来源为网络,整理的同时也会有一些总结和感悟。由于研究方向需求,主要研究数字旋转编码器。 1.编码器的定义 编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。——摘自《百度百科》 通常来说,编码器可以将角度位移、直线位移、转速等物理量转换为电信号。这里的电信号根据不同原理的编码器输出脉冲、二进制数码等不同的类型,下面会提到。 2.编码器的分类 编.

黑化咸鱼的博客 1万+

ISO26262功能安全--产品开发过程

目录 1.总体理解 2.概念阶段——吹牛,我们是打草稿的 2.1 相关项定义 2.2 HARA分析 2.3 功能安全目标 2.4 安全需求与安全概念 3. 系统阶段——闭门造神车,我们开始修炼 3.1 技术安全需求(TSC) 3.2 系统架构设计 3.3 安全分析与独立性分析 3.4 软硬件接口(HSI) 4. 硬件阶段——苦其心志,苦练经骨 4.1 硬件架构...

AgingMoon的博客 1万+

Scala语言学习-06-传名参数、传值参数、传函数参数的区别

1、传名参数: 传名参数会把传入函数的函数体整个带入,我们在函数ValPmtPassing中调用两次,所以他也会完整调用两次ExampleFuc,输出两次:调用一次例子函数。2、传值参数: 传值参数只会在开始时调用一次ExampleFuc,再把传入函数的返回值带入,所以只输出一次:调用一次例子函数。3、传函数参数: 实现的效果上和传名参数一样,但使用上稍有区别,传名参数只需要一个传入参数,就把方法名和方法需要的参数一并传入,而传函数参数需要传多个,除了函数名还有参数,便捷性上传...

qq_45111959的博客 289

深度学习之目标检测--Pytorch实战

只需要能看懂python代码,就能最快入门深度学习---目标检测。目标检测简单的玩玩儿还行,模型调优,调参,还需要一定的数学功底。通过代码来实现卷积,池化,非线性激活,正则化,归一化,能让人减少对大量数学公式的敬畏,手写神经网络也是考研复试中上机考试的压轴题,掌握搭建神经网络和如何训练模型是需要掌握的基础的

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1万+

传值、传地址、传名的区别

传值、传地址、传名的区别 例题: (1)引用调用(call-by-reference) 传入的是B[1]的地址,也就是说x的改变会影响B[1]. I=1; x=x+2;//x为B[1],B[1]为3. B[I]=10;//直接赋值B[1]为10 I=2; x=x+2;//x为B[1],B[1]为12 执行完程序后B[1]为12,B[2]为2. (2)传值调用(call-by-value) 传值是把实参的值赋值给形参,对形参的修改,不会影响实参的值。传入的仅为B[1]的值,x的变化不会对B[1]有影响。

qq_42958654的博客 1551

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8018

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。

@bangbang的博客 7285

scala-传名函数和传值函数

Scala的解释器在解析函数参数(function arguments)时有两种方式:先计算参数表达式的值(reduce the arguments),再应用到函数内部;或者是将未计算的参数表达式直接应用到函数内部。前者叫做传值调用(call-by-value),后者叫做传名调用(call-by-name)。 传值函数和传名函数 object Add { def addByName(...

qq_43193797的博客 269

HarmonyOS应用开发者基础认证

B. 自定义组件:可复用的 UI 单元,可组合其它组件。D. 内置组件:ArkTS中默认内置的基本组件和布局组件,开发者可以直接调用,如Column、Text、Divider、Button等。E. 属性方法:用于组件属性的配置,统一通过属性方法进行设置,如fontSize()、width()、height()、color() 等。在Column和Row容器组件中,justifyContent用于设置子组件在主轴方向上的对齐格式,alignItems用于设置子组件在交叉轴方向上的对齐格式。

牛肉胡辣汤 3818

跟我一起学scala之——传名函数和传值函数

Scala的解释器在解析函数参数(function arguments)时有两种方式:先计算参数表达式的值(reduce the arguments),再应用到函数内部;或者是将未计算的参数表达式直接应用到函数内部。前者叫做传值调用(call-by-value),后者叫做传名调用(call-by-name)。 传值函数和传名函数 object Add { def addByName(...

SunWuKong_Hadoop的博客 352

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Scala注意点

匿名函数 Lamda (参数) => {函数体} (t1, t2) => { (t1._1, t1._2 + t2._2) } 下划线的各种用法 Scala中的下划线使用总结 【Scala】Scala中的_ 和 _*分别代表什么 函数与方法 Scala方法和函数的区别 闭包 老师的资料上写: 一个函数在实现逻辑时,将外部变量i引入到函数内部,改变了这个变量的生命周期,称之为闭包 闭包,看这一篇就够了——带你看透闭包的本质,百发百中 ...

weixin_42955958的博客 289

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Scala-控制抽象

package bilibili /** @author @date 2021/7/22 15:49 @VERSION 1.0 */ object kongzhichouxiang { //传值函数 def f1(a:Int):Unit={ println(“f1 调用1”+a) println(“f1 调用2”+a) } //传名函数 变量调用几次就执行几次参数的代码块 def f2(a: =>Unit)={ println(“f2调用1:”+a) println(“f2调用2:”+a) } d

王子健的播客 184

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【scala函数式编程】严格求值和惰性求值

介绍scala惰性求值,通过创建一个Stream,对比直接求值和惰性求值的差异,更进一步的,介绍了无限流与共递归

檐前潜心学种瓜 347

scala传值调用和传名调用

代码: 传值调用: object ZFBToPay { var money = 1000 //吃一顿消费50 def eat():Unit={ money=money-50; } //余额 def balance():Int={ eat() money } //打印余额 def printMoney(x: Int):Unit={ ...

m0_37746551的博客 886

【scala】方法与函数

一、函数与方法的概念 我们知道面向对象的语言Java,其对象(类)包含域成员(对象中的属性)和方法(对象中定义的函数)。函数的称呼源自C语言,Java面世后,人们通常用方法或函数来称呼类中定义的函数成员。函数与方法两者语义一样。 C语言函数是函数式语言,函数可以赋值给其他变量,可以作为其他函数的参数,如果对C语言陌生,可以用JavaScript的函数对象来理解。 scala一种纯粹的面向对象...

Wonder ZH 395

从新手到高手:Scala函数式编程完全指南,Scala 函数传名调用(13)

Scala的解释器在解析函数参数(function arguments)时有两种方式: 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部; 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部 在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。

qq_45746668的博客 377

Java的函数到底是传值?传引用?还是……

本文内容总结自: http://blog.youkuaiyun.com/null____/article/details/7893360接触过编程的人大部分都写过swap函数,这个函数在C/C++里面非常好写:void swap(int &a ,int &b) { int temp; temp = a; a = b; b = temp; }但是Java里面就没那么简单了,因为J

暗黑ZX Cyberwind 554

(转)关于java函数传值还是传引用的经典问题

看到的一个解释这个问题的帖子,有那么点意思啊呵呵: 经典的问题,但却不容易弄懂,尤其对有c基础的java程序员来说,更容易引起混乱,这里我试图简单点描述。 “java函数是传值的,java函数传递的参数是对象的引用” 这两句话好像初听上去有些矛盾,但却是事实,因而引起很多初学者的混乱。在这里我试图据个简单的例子来说明java的这个特性,可能不全面,希望大家来补全。 [...

盛夏光年 182

scala学习(二)-- 函数

Scala函数传名调用 scala的解释器在解析函数参数时有两种方式: 传值调用:先计算参数表达式的值,在应用到函数内部 传名调用:将为计算的参数表达式直接应用到函数内部,每次使用传名调用时,解释器都会计算一次表达式的值。 object Test { def main(args: Array[String]) { delayed(time()); } d...

leemusk的博客 722

scala函数

package aa object DefTest { //空为()相当与null //return在函数中代表退出显示。。。。 //********************函数别忘写等号****************************** def c(a:Int,b:Int)={ a+b } //在Scala中,还可以按名调用参数,这样就允许不按顺序指定...

yyf960126的博客 295
上一篇: HBase性能优化
下一篇: scala指定参数函数,匿名函数,高阶函数特征
Alwaysdazz
博客等级 码龄8年 24粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值