Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >高阶函数w/名称调用?

高阶函数w/名称调用?
EN

Stack Overflow用户
提问于 2016-07-06 18:46:13
回答 1查看 299关注 0票数 2

给予:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def higherOrderCallByName(f: => Int => Int, x: Int): Int = f(x)
def higherOrderCallByValue(f: Int => Int, x: Int): Int = f(x)

在什么情况下,用名字调用函数参数(即higherOrderCallByName中的f )是惯用的/恰当的。

EN

回答 1

Stack Overflow用户

发布于 2016-07-06 21:31:27

为了澄清,在call-by-value,中,参数的值是在传递给函数之前确定的,而在中,对参数的按名调用值被推迟到函数内部使用。

我同意m的观点,在传递函数可能是昂贵调用的情况下,higherOrderCallByName是完全有效的。

另一个我能想到的场景是,如果传递的函数有一些副作用,那么按名参数的行为将与按值参数不同。我已经修改了您的示例,以说明这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def higherOrderCallByName(f: => Int => Int, x: Int): Int = {
  println("Inside by-name function.")
  f(x)
}

def higherOrderCallByValue(f: Int => Int, x: Int): Int = {
  println("Inside by-value function.")
  f(x)
}

def funWithSideEffect() : (Int) => Int = {
  println("Some side effect.") // some side-effect or some expensive call
  x => x + 1    // returns function which increments param
}

现在,如果调用higherOrderCallByValue(funWithSideEffect(), 2)输出,则如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Some side effect.
Inside by-value function.

正如输出所示,副作用发生在higherOrderCallByValue的身体执行之前。

higherOrderCallByName(funWithSideEffect(), 2)的输出将类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Inside by-name function.
Some side effect.

当遇到higherOrderCallByName时,副作用发生在f(x)内部。现在,想象一下f(x)higherOrderCallByName中多次执行的场景。显然,它会对您的应用程序产生很大的影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38236850

复制
相关文章
【Kotlin】Kotlin 高阶函数 ( 高阶函数当做参数 | 高阶函数定义 | 高阶函数调用 )
Kotlin 高阶函数 : Kotlin 的高阶函数 , 就是方法的参数 或 返回值 是函数类型的 函数 ;
韩曙亮
2023/03/27
8130
高阶函数
原文链接:https://note.noxussj.top/?source=cloudtencent 什么是高阶函数? 有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二
菜园前端
2023/06/03
2130
高阶函数
其实高阶函数是函数式编程里面的一些概念,更深入的讲其实是来源于数学里面的一些概念,这里用Python来说明一些常见的概念,如果感兴趣可以学习别的函数式编程的语言。
云深无际
2021/03/12
4520
高阶函数
高阶函数
一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数 编写高阶函数,就是让函数的参数能够接收别的函数 函数式编程就是指这种高度抽象的编程范式 高阶函数的特点 变量可以指向函数     函数本身也可以赋值给变量,即:变量可以指向函数
py3study
2020/01/15
4630
Kotlin的高阶函数和常用高阶函数
首先我们可以知道, forEach 是 Array 的扩展函数,然后参数是 action ,但是 action 不再像和我们以前Java那样传递的是一个对象,这时传递的是一个函数 。这个函数的入参为 T ,返回值为 Unit 。所以 forEach 也是一个高阶函数,因为它将函数当做参数进行传递了。我们尝试着去调用一下 forEach 函数:
用户2802329
2018/12/05
1.7K0
高阶函数
==把函数作为参数传入==,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
生信喵实验柴
2023/09/04
1530
高阶函数
Python 获取被调用函数名称,所处模块,被调用代码行
print(sys._getframe().f_code.co_filename)
授客
2019/09/11
2.5K0
Python 获取被调用函数名称,所处模块,被调用代码行
Python入门高阶教程-高阶函数
前面写的 Python 入门教程中只有基础入门和基础进阶两部分,可以在公众号下拉菜单中找到,小一我都已经分好类了。
小一不二三
2020/02/07
7210
Python入门高阶教程-高阶函数
JavaScript高阶函数
把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等 可以保持业务逻辑模块的纯净和高内聚性
薛定喵君
2019/11/06
4590
Python|高阶函数
01 函数名也是变量! abs(-100) 对于abs()这个函数,完全可以把函数名abs看成变量,它指向一个计算绝对值的函数! 因此,函数名其实就是指向函数的变量,也就是说,变量可以指向函数。 f = abs f(-10) 10 02 高阶函数 既然变量f可以指向函数,并且函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。 def minus(x, y, f): return f(x) - f(y) minus就是高阶函数,因为其参数f,指向了函
double
2018/04/02
8380
Python 高阶函数
功能:将传输的函数fn依次作用到lsd集合中的每个元素,并把结果作为一个Iterator返回
星哥玩云
2022/09/08
3640
python高阶函数
在这幅思维导图中主要是介绍了Python中几个比较重要的高阶函数及其用法,还有文件读取的三种方式,希望对学习Python的朋友有所帮助。 函数 range 排序 sort sorted 反转 reverse reversed heapq 堆 deque 双端队列 zip enumerate lamdba map reduce filter 文件读取方式 read readline readlines
皮大大
2021/03/02
3360
React高阶函数
在React中,高阶函数是一种函数式编程的概念,用于增强组件的功能和复用代码。它接受一个组件作为参数,并返回一个新的增强组件。高阶函数允许我们在不修改原始组件的情况下,通过包装和增加额外功能的方式来扩展组件。
堕落飞鸟
2023/05/19
5890
python高阶函数
高阶函数定义: 1.函数接收的参数是一个函数名; 2.函数返回的是一个函数名; 只要满足上述条件中的任意一个条件的函数均属于高阶函数
py3study
2020/01/13
3840
Python高阶函数
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。 而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。 我们首先要搞明白计算机(Computer)和计算(Compute)的概念。 在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。 而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。 对应到编程语言,就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
小破孩的梦想空间
2020/04/23
4480
Python高阶函数_map/reduce/filter函数
如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你就能大概明白map/reduce的概念。
小破孩的梦想空间
2020/04/23
4790
Python高阶函数
在了解什么是高阶函数之前,我们来看几个小例子。我们都知道在 python 中一切皆对象,函数也不例外。比如求绝对值函数 abs,我们可以用一个变量 f 指向 abs 函数,那么当调用 f() 的时候可以得到和 abs() 一样的效果,这说明变量可以指向函数!
Python编程与实战
2019/12/03
5580
Python 高阶函数
高阶函数:简单来讲,一个函数可以接收另一个函数来作为参数,这样的函数称之为高阶函数
py3study
2020/01/19
6830
React 中高阶函数与高阶组件(上)
React 中最大的一亮点,就是组件化开发模式,而编写 React 组件,对于无状态的组件,我们可以用函数式组件编写,而复杂的组件(聪明组件/外层组件)可以用类class编写组件
itclanCoder
2020/12/01
2K0
React 中高阶函数与高阶组件(上)
点击加载更多

相似问题

调用高阶函数- Scala

21

调用Clojure高阶函数

11

调用高阶函数时出错。

35

用参数调用高阶函数

20

高阶函数调用奇怪行为

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文