Scala函数

1.基本语法

 解析main方法

def main(args: Array[String]): Unit = {函数体}*def 关键字,声明一个函数
* main 方法名
* args 参数名称
* Array[String] 参数的类型
* Unit 返回值类型,相当于Java中的void,没有返回值
* {} 函数体

 函数省略规则

 (1)return可以省略,Scala会使用函数体的最后一行代码作为返回值

(2)如果函数体只有一行代码,可以省略花括号

(3)返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)

(4)如果函数没有参数,那么小括号可以省略,调用时小括号也必须省略

 函数调用

 scala可以在类中定义函数,通过类的方法调用

在object中定义函数,通过类方法调用

同时可以在函数内部调用

2.函数式编程

面向函数编程: 将函数传来传去,将函数作为参数 或者是 返回值,需要考虑类型的限制

2.1 以函数为参数

package com.bigdata.scalaobject DemoFun02 {// func1是一个”以String以及Int作为参数,Int作为返回值“类型的函数// (String,Int) => Intdef func1(str: String, int: Int): Int = {str.toInt + int}//(Int,String)=>Intdef func2(int: Int, string: String): Int = {int + string.toInt}//(String,Int)=>Intdef func3(str: String, int: Int): Int = {str.toInt * int}// String => Intdef func4(str: String): Int = {str.toInt + 100 + 100}// 定义一个函数funcX,能够接收一个函数func// 接收的函数func的类型为  (String,Int) => Int// 最终实现对传入的函数func进行调用,并打印返回的结果def funcX(func:(String,Int)=>Int):Unit={val i: Int = func("100", 200)println(i)}def main(args: Array[String]): Unit = {funcX(func1)}}

2.2 匿名函数

没有名字的函数就是匿名函数

定义匿名函数:(参数名:参数类型,参数名:参数类型,参数名:参数类型) => {方法体}

package com.bigdata.scalaobject DemoAnoymousFun {//定义匿名函数(str:String,int:Int)=>{str.toInt+int}//为匿名函数取名val anonymousFun: (String, Int) => Int = (str: String, int: Int) => {str.toInt + int}def funcX(func: (String, Int) => Int): Unit = {val i: Int = func("100", 200)println(i)}def funcX2(func: String=> Int): Unit = {val i: Int = func("100")println(i)}def main(args: Array[String]): Unit = {//调用匿名函数,调用函数名,间接调用funcX(anonymousFun)//直接调用匿名函数funcX((str: String, int: Int) => {str.toInt + int})//几种省略funcX((str: String, int: Int) => str.toInt + int) //一行函数体,省略{}funcX((str,int)=>str.toInt+int) //匿名函数是作为参数传递给另一个函数,则参数的类型可以省略funcX2(str=>str.toInt) //如果匿名函数的参数只有一个,则括号可以省略funcX2(_.toInt)/*如果匿名函数的参数只有一个,并且只被使用了一次,则可以用下划线替代,并且关于参数声明的部分可以直接省略,以及 => 也需要省略*/}}

匿名函数的省略规则

1、如果代码只有一行 花括号可以省略

2、如果匿名函数作为 参数 传给另外一个函数 则匿名函数的参数类型可以省略

3、如果匿名函数只有一个参数则括号可以省略

4、如果匿名函数中的参数在逻辑中只使用了一次 则可以用下划线替代 然后 => 左边的部分可以省略

 2.3 函数作为返回值

package com.bigdata.scalaobject DemoFun03 {//函数作为返回值,返回值的类型无法推断,需要手动指定def fun01(str:String): Int=>Int = {def fun01_01(int: Int):Int={str.toInt+int+100}fun01_01}//简化函数定义def fun02(str: String)(int:Int): Int = {str.toInt + int + 100}//函数柯里化//将有N个参数的函数,变成N个只有一个参数的函数def func03_KL(i1: Int)(i2: Int)(i3: Int)(i4: Int)(i5: Int): Int = {i1 + i2 + i3 + i4 + i5}def main(args: Array[String]): Unit = {val intToInt: Int => Int = fun01("20")val i: Int = intToInt(20)println(i)//简化调用println(fun01("20")(20))println(fun02("50")(50))val kl: Int => Int => Int = func03_KL(1)(2)(3)println(kl(40)(50))}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/254419.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微信公众号注册时提示该主体注册数量已超过上限怎么办?

很多用户在注册或认证微信公众号时,遇到“该主体注册数量已超过上限”的问题,这是怎么回事呢? 原因是2018年11月16日微信官方对公众号注册数量做了调整: 1.个人主体注册公众号数量上限由2个调整为1个; 2.企业类主体注…

开通微信公众号流程所需资料及时间

2019独角兽企业重金招聘Python工程师标准>>> 序号 阶段 所需资料 所需时间 一、(企业)注册公众平台 使用未注册过微信公众号的邮箱注册、验证激活 即时二、 选择帐号类型 详情查看服务号、订阅号、企业号区别后选择类型 即时三、信息登记 选择…

支付宝、微信注册时间,轻松查看!

早几天分享过与微信年度报告查询微信使用多少天,朋友圈传播非常火爆,今天教大家一招如何查询支付宝使用多少天。 看到上图还能回想到当时的激动吗? 马上进入正题,不啰嗦,查看支付宝注册日期的方法,也超级简…

车载ECU休眠唤醒-TJA1145

前言 首先,请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天&#xff…

oppor15x支持html吗,oppor15x配置参数详情 r15和17的亲儿子

oppor15x虽然看上去和oppor15这款手机比较相似,但是实际上,作为oppo的最新款手机,oppor15x的发布时间是在oppor17之后的,不仅如此,在外观方面,oppor15x和oppor17会更为相似,在配置方面却更偏向o…

oppo r15 android 8,OPPO R15体验:基于安卓8.1,ColorOS 5.0更好用

当目前智能手机硬件性能普遍过剩,越来越多的人们开始逐渐意识到,参数并不等于体验,反而是依附于硬件之上的操作系统很大程度上直接决定了一款智能手机的使用体验。 在当前智能手机市场,虽然说安卓系统占据了绝大部分市场份额&…

android 汇编 参数,安卓ARM汇编基础知识

ARM 是 Advanced RISC Machine 的缩写,可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集。RISC(Reduced Instruction Set Computing) 精简指令集计算机:一种执行较少类型计算机指令的微处理器。 处理器指令集: 计算机处理命…

linux x64 寄存器 传参,Linux X86架构参数传递规则

背景 突然好奇x86架构下函数参数怎么传递的,之前只是听别人说过通过寄存器,但是怎么传,什么顺序都没有仔细研究过,也没有实际测试过,因此就想着用实践来检验一下咯。 传参顺序 在32位和64位机器上,寄存器名称不同,64位机器为rxx,32位机器为exx。传参顺序如下, 64位系统…

linux控制协程参数,Linux高性能网络:协程系列06-协程实现之切换-Go语言中文社区...

目录 6.协程实现之切换 问题:协程的上下文如何切换?切换代码如何实现? 首先来回顾一下x86_64寄存器的相关知识。x86_64 的寄存器有16个64位寄存器,分别是:%rax, %rbx, %rcx, %esi, %edi, %rbp, %rsp, %r8, %r9, %r10, …

陶瓷气体放电管参数含义详解

​很多客户反应,不太明白陶瓷气体放电管产品手册中的参数含义。不可否认,电路保护器件产品规格书手册用的语言大部分都是英文,没有一定的英文基础,还真消化不了。有时候,就算能看得懂,但是面对枯燥无味的参…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器,其中包括: (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。 (2) 6 个状态寄存器…

x64 汇编 参数传递

参数传递在不同的系统上是不一样的 称作 calling convention 调用约定 windows rcx,rdx,r8,r9 用来存储整数或指针参数,按照从左到右的顺序 xmm0,1,2,3 用来存储浮点参数 其余参数会压入栈中。 linux 当参数在 6 个以内,参数从左到右依次放入寄存器:…

汇编和c语言函数的参数,C函数与汇编函数之间参数及返回值传递方法

AAPCS对ARM结构的一些标准做了定义,在这里我们只重点介绍函数调用部分,如图8所示,AAPCS为ARM的R0~R15寄存器做了定义,明确了它们在函数中的职责: 图 8 AAPCS关于ARM寄存器的定义 一、函数调用时的规则如下: 1、 父函数与子函数间的入口参数依次通过R0~R3这4个寄存器传递。…

台式计算机配置参数,整机配置参数以及性能测试_台式电脑评测-中关村在线

我们首先来看一看同方E500的硬件配置情况。 根据AIDA64所示,同方E500搭载了i5-7400处理器、8GB内存、128GB建兴固态硬盘以及1TB西部数据机械硬盘。这个配置对于商务办公机来讲是非常合理的,在性能与成本之间得到了最佳的平衡。那么具体性能表现又是如何呢?我们来继续往下看。…

此计算机核心参数,买电脑如何选CPU?这三个参数一定要看!

原标题:买电脑如何选CPU?这三个参数一定要看! CPU是电脑中的核心,也可以说是电脑的大脑,一直以来CPU与GPU那个重要都是争论不休的话题,四月份升级九代酷睿处理器的机械师笔记本拥有怎样的升级体验呢?高性能玩家该通过…

5G NR首版标准R15解读

5G定义了增强型移动宽带(eMBB)、超可靠低延迟通信(URLLC)、大规模机器类型通信(mMTC) 三大场景。针对这三大场景,在2018年6月已完成的3GPP R15标准不仅定义了5G NR(新无线&#xff0…

oppo r15 android 8,抢不到小米8,就用OPPO R15吧

抢不到小米8,就用OPPO R15吧 2018-06-09 17:10:13 17点赞 21收藏 49评论 最近小米8好像很热门,于是,突然就想买个了,反正都是刘海屏千篇一律的手机,还是10年前好,手机款式都是百花齐放,各有各特…

6.S081——补充材料——RISC-V架构中的异常与中断详解

0.briefly speaking 我在阅读Xv6源码过程中对很多概念感到困惑,想到也许会有其他人对此秉持同样的困惑,所以我将我的研究和学习过程总结下来并编篡成如下的博客。本篇博客想对RISC-V标准中有关中断和异常的概念进行一个梳理,考虑RISC-V标准的…

android微信逆向工程,iOS逆向 - 微信自动添加好友

相关源码:Github地址 一、前言 本篇主要实现在微信上自动添加好友,从而熟悉 iOS 逆向分析的过程。 二、 工具 2.1 MacBook 软件 制作 Tweak 的工具 端口转发,可以让我们通过usb连接手机进行ssh、lldb调试等。主要使用python-client目录下的文件 dump 目标…

免费查询微信好友还在不在了~

最近一周经常被一些人发一些检测好友的消息,目测这东西好像是有条件收费的,然后就想想python是不是能写个免费版的好友检测。 具体可以看看运行结果: 编写脚本会用到以下几个模块 coloramacoloredlogshumanfriendlylxmlqrcoderequestssixrequ…