首页 > 其他分享 >20、高阶函数和回调函数

20、高阶函数和回调函数

时间:2023-05-15 22:03:57浏览次数:45  
标签:oper 20 函数 int fmt func Println 高阶

1.高阶函数和回调函数的定义

根据Go语言的数据类型特点,可以将一个函数作为另外一个函数的参数

例如:
现在有fun1() , fun2()两个函数,当我们把fun1作为fun2这个函数的参数时。
fun2函数:称之为高阶函数

  • 接收一个函数作为参数的函数,高阶函数的定义

fun1函数:称之为回调函数

  • 作为另一个函数的参数的函数,回调函数的定义
/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/15  21:18
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 求两个数的加减乘除运算
	fmt.Printf("%T\n", add)
	fmt.Printf("%T\n", oper)

	// 调用函数
	res := add(1, 2)
	fmt.Println(res)
	res2 := oper(10, 20, add)
	fmt.Println(res2)

	/**
	oper : 高阶函数
	add、sub、mul、div、mod: 回调函数
	*/
	res3 := oper(100, 5, sub)
	fmt.Println(res3)

	res4 := oper(100, 10, mul)
	fmt.Println(res4)

	res5 := oper(100, 20, div)
	fmt.Println(res5)

	res6 := oper(100, 50, mod)
	fmt.Println(res6)

	// 使用匿名函数的方式
	fun1 := func(a, b int) int {
		return a + b
	}

	res7 := oper(10, 20, fun1)
	fmt.Println(res7)

	res8 := oper(100, 200, func(x int, y int) int {
		return x * y
	})
	fmt.Println(res8)

}

func add(a, b int) int {
	return a + b
}

func sub(a, b int) int {
	return a - b
}

func mul(a, b int) int {
	return a * b
}

func div(a, b int) int {
	return a / b
}

func mod(a, b int) int {
	return a % b
}

func oper(a, b int, fun func(int, int) int) int {
	fmt.Println(a, b, fun)
	return fun(a, b) // 函数的具体回调处
}

标签:oper,20,函数,int,fmt,func,Println,高阶
From: https://www.cnblogs.com/qbbit/p/17403239.html

相关文章

  • 每日总结2023-05-15
    今天对项目中广告做出了处理:1.新建数据库表,为id,广告播放者、广告名、链接、是否启用。2.将对对应的影视文件上传到云服务器中,通过外网访问链接。3.将原先本地视频url改为对应的云端视频文件。对于本人的Android项目,正在进行手机唯一标识登录学习。......
  • Citect2018R2使用报警页面功能做操作记录1
    这一篇学习笔记我在新浪博客记录过,地址是Citect2018R2使用报警页面功能做操作记录1_来自金沙江的小鱼_新浪博客(sina.com.cn)这两天练习了做报警页面,稍微扩展一下,可以做操作记录功能。使用unityv13.1新建一个项目,简单配置一下硬件,新建变量: 新建程序段   这个练......
  • MATLAB快速傅里叶变换(fft)函数详解
    MATLAB快速傅里叶变换(fft)函数详解调用:​​1.Y=fft(y);Y=fft(y,N);式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。说明:函数fft返回值的数据结构具有对称性根据采样定......
  • CITECT2018R2操作记录继续
    这一篇学习笔记我在新浪博客记录过,地址是CITECT2018R2操作记录继续_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天学习练习了Citect2018R2操作按钮的事件记录实现方法,今天练习一下在画面上修改设定值的操作事件记录。还是在昨天项目程序的基础上来做。在PLC程序上新建变量 ......
  • citect2018R2报警函数练习1-做一个简单的报警显示页面
    这一个笔记我在新浪博客记录过,地址是Citect2018R2报警函数练习1-做一个简单的报警显示页面_来自金沙江的小鱼_新浪博客(sina.com.cn) 这两天看citect一些文档,想着练习一下Cicode的报警函数。新建一个Unity项目,简单的配一下硬件 写简单的程序新建一个Citect2018R2程序,使......
  • Citect2018R2报警页面练习1续:显示出报警状态
    这一篇学习笔记我在新浪博客记录过,地址是Citect2018R2报警页面练习1续:显示出报警状态_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天练习了作业个报警信息页面,显示的报警无法区分是到来的还是离去的,有没有确认,虽然颜色上不一样,但操作人员显然不会去记忆每种颜色什么含义,需要有文......
  • Citect2018R2报警函数练习2:报警页面过滤报警
    这一片学习笔记我在新浪博客记录过,地址是Citect2018R2报警函数练习2:报警页面过滤报警_来自金沙江的小鱼_新浪博客(sina.com.cn)昨天练习了在页面上通过cicode控件和函数来做一个报警页面,包括翻页和报警确认。昨天对32个报警做了分类,分成4类和5类。如果希望报警页面只是显示4类报......
  • ORA-02049:超时:分布式事务处理等待锁 问题解决
    数据库添加DBLink后,很容易出现一个问题:ORA-02049:超时:分布式事务处理等待锁ORA-02063:紧接着line(起自ODS_LINK) 问题原因分析:第一次执行操作后出错,数据库没有提交或回退,未关闭原有数据库窗口,重新打开新窗口执行数据插入操作,报ORA-02049错误。解决办法:数据库登陆管理员账号查看1、......
  • Luogu P5520 [yLOI2019] 青原樱
    考虑先不种花,先算出“花之间空位的可行方案数”\(tot\),乘上花的排列的贡献就能算出答案,即\(tot\timesm!\)为答案所以只需算出“花之间空位的可行方案数”能发现,设\(x_i\)为第\(i\)朵花与第\(i-1\)朵花之间空位的数量,其中设第\(0\)朵花在\(0\)的位置,则发现会有以......
  • LeetCode 周赛 345(2023/05/14)体验一题多解的算法之美
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。往期回顾:LeetCode双周赛第104场·流水的动态规划,铁打的结构化思考周赛概览T1.找出转圈游戏输家(Easy)标签:模拟、计数T2.相邻值的按位异或(Medium)标签:模拟、数学、构造T3.矩阵中移动的最......