scala:函数作为值或参数进行传递、作为返回值进行返回
@
函数可以作为值进行传递
- 语法
var f = 函数名 _
- 如果明确了变量的数据类型,那么下划线可以省略
//函数正常的声明与调用
def foo():Int={
println("foo...")
10
}
//将foo函数的执行结果赋值给res变量
//val res: Int = foo()
//println(res)
//函数作为值进行传递 语法:在函数名称的后面 + 空格 加下划线
//注意:将foo函数作为一个整体,赋值给f变量, f是函数类型 ()=>Int
//val f : () => Int = foo _
def f : () => Int = foo _
//这个时候,f就是一个函数,如果要想运行f函数的话,必须得加()
//println(f) //<function0>
//println("-----------------")
//println(f())
//var ff = foo //将函数执行结果赋值给ff
//var ff = foo _ //将函数本身作为值赋给ff
//将函数本身作为值赋给ff 如果明确了变量的类型,那么空格和下划线可以省略
//var ff:()=>Unit = foo
//println(ff)
函数可以作为参数进行传递
- 通过匿名函数
- 扩展函数的功能
- 提高函数的灵活度
//函数可以作为参数,进行传递(大多数情况都是通过匿名函数的形式)
//定义一个函数calculator,该函数接收一个函数类型的参数op,op定义了对两个整数要进行什么样的操作
def calculator(a:Int,b:Int,op:(Int,Int)=>Int): Int ={
op(a,b)
}
//定义一个函数f1,完成两个整数的加法运算
def op(a:Int,b:Int):Int={
a + b
}
//println(calculator(10,20,op))
println(calculator(50, 20, (a: Int, b: Int) => {
a - b
}))
println(calculator(50, 20, _ - _))
println(calculator(50, 20, _ + _))
*/
函数可以作为返回值进行返回
- 函数的嵌套
- 函数链式调用,通过参数传递数据,在执行的过程中,函数始终占据栈内存,容易导致内存溢出
- 闭包
- 柯里化
//函数可以作为返回值进行返回----函数的嵌套
def f1():()=>Unit ={
def f2(): Unit ={
println("f2函数被调用了")
}
//将f2作为返回值返回给f1
f2 _
}
//ff就是f2
//var ff = f1()
//ff()
//f1()()
什么是匿名函数
- 参数的类型可以省略,会根据形参进行自动的推导
- 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。
- 匿名函数如果只有一行,则大括号也可以省略
- 如果参数只出现一次,则参数省略且后面参数可以用_代替
scala:函数作为值或参数进行传递、作为返回值进行返回的更多相关文章
- Scala 函数入门之默认参数和带名参数
Scala 默认参数 在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数. def sayHello(firstName: ...
- python学习笔记11(函数二): 参数的传递、变量的作用域
一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ...
- Qt:postEvent 与 customEvent() 函数 进行异步通信; 以及参数的传递 // 防止界面卡死;;
class ColorChangeEvent : public QCustomEvent { public: ColorChangeEvent( QColor color ) : QCustomEve ...
- node.js 如何完美的从命令行接收参数所传递进来的值
https://segmentfault.com/q/1010000000367285
- C语言函数参数的传递详解
一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行--唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){ int tmp; ...
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...
- 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)
apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
随机推荐
- cassandra权威指南读书笔记--cassandra查询语言
cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区.复合键由一个分区键和一组可选的集群列组成.分区键用于确定存储行的节点,分区键也可以包含多个列.集群键用于控制数据如何排序以及在分区中 ...
- Centos8上搭建EMQ MQTT
layout: post title: Centos8上搭建EMQ MQTT subtitle: 在阿里云Centos8搭建EMQ并配置接入 date: 2020-3-11 author: Dapen ...
- 负载均衡之LVS与Nginx对比
今天总结一下负载均衡中LVS与Nginx的区别,好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TUN模式只有请求的报文经过Direc ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) B. Journey Planning(映射)
题意: 已知 n 所城市(从 1 至 n 编号)及其美丽值,选取一条旅行路线,满足路线中两两城市美丽值之差等于编号之差,求所有旅行路线中美丽值的最大值. 思路: 美丽值与编号作差,差值为键,映射累加 ...
- 【bzoj 2597】[Wc2007]剪刀石头布(图论--网络流 最小费用最大流)
题目:在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道于统计有多少这样的 ...
- hdu 6860 Fluctuation Limit 双向贪心
题意: 给你n个区间[li,ri],和一个整数k,你从每一个区间内选出来一个数,把从第i个区间内选出来数放在第i个位置,这样会构成一个长度为n的序列,你需要保证序列中任意两个相邻的数之差的绝对值要小于 ...
- AtCoder Beginner Contest 183 E - Queen on Grid (DP)
题意:有一个\(n\)x\(m\)的棋盘,你需要从\((1,1)\)走到\((n,m)\),每次可以向右,右下,下走任意个单位,\(.\)表示可以走,#表示一堵墙,不能通过,问从\((1,1)\)走\ ...
- 牛客练习赛70 D.数树 (模拟,STL)
题意:每次有\(3\)中操作,对两个点连条边,删去某条边,或者问当前大小不为\(1\)的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq. 题解:水题,用map存一下pair然后分 ...
- JavaScript——DOMM
文本节点 != 文本内容
- c#中几种常见的数据结构
数组(Array): 1.数组存储在连续的内存上 2.数组的元素类型必须相同 3.数组可以直接通过下标访问 4.查找与修改元素的速度非常快 5.必须在声明时指定长度 动态数组(ArrayLis ...