Scala014--Scala中的函数

news2024/11/16 21:31:33

一,函数的定义和声明

对于其他计算机语言来说,如Java,python,函数和方法是一样的,但是对于Scala来说,函数和方法并不是同一个概念,方法是类或者是对象的成员,而函数是一个对象。但是函数也像方法那样,可以简写一些地方,如:函数的类型,返回值类型,如果函数体里面一条语句的话,可以省略花括号。如果还是初学的话,建议写全。

函数的定义格式:

val 变量名:【函数类型】(参数类型1,参数类型2)=> 返回值类型=(参数名1:参数类型1,参数名2:参数类型2)=>{函数体}

scala> val func:(Int,Int)=>Int=(a:Int,b:Int)=>{a+b}  // 定义一个func函数
func: (Int, Int) => Int = $Lambda$1041/2131366717@644a3add

1,定义函数和定义方法的区别 

 函数的声明和方法的声明是不一样的,接下来我先回顾一下Scala中方法的定义和声明,并将其和函数进行对比:

方法的定义和声明:
1,def关键字
2,方法名和参数列表可以直接放到一起
3,返回值类型的前面是冒号:
4,=方法指向方法体
def func1(arg1:type,arg2:type):return_type={方法体}

函数的定义和声明;
1,val 定义一个变量(常量)接收函数的值,变量名就是函数名
2,参数列表和函数名之间使用冒号:分开(并且只需要指定需要的元素的类型即可,不需要参数名)
3,返回值的前面使用指向=>
4,返回值后面不是直接跟函数体,而是函数的参数列表(需要传入参数名:参数类型)
5,函数体和函数的参数列表之间使用=>分开。
val variable1:(type,type)=>return_type=(arg1:type,arg2:type)=>{方法体}
 

现在我定义一个函数func和meth方法,并在没有任何参数情况下直接返回它们的结果:

scala> val func:(Int,Int)=>Int=(a:Int,b:Int)=>{a+b}  // 定义一个func函数
func: (Int, Int) => Int = $Lambda$1041/2131366717@644a3add

scala> def meth(a:Int,b:Int):Int={a-b}  // 定义一个meth方法
meth: (a: Int, b: Int)Int

scala> func  // 没有使用任何参数
res0: (Int, Int) => Int = $Lambda$1041/2131366717@644a3add

scala> meth  // 没有使用任何参数
<console>:13: error: missing argument list for method meth
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `meth _` or `meth(_,_)` instead of `meth`.
       meth  // 没有使用任何参数的方法就会报错

 如上,我们可以看到,对于函数来说,在没有任何参数情况下,它依旧可以输出,输出的结果为函数的地址。但是对于方法来说,就不行,没有任何参数的方法会直接报错。

二,匿名函数

匿名函数就是没有函数名的函数。格式:(变量名1:变量类型,变量名2:变量类型)=>{函数体}

在集合的应用中比较常用,因为有些时候我们使用一个函数的时候并不需要知道它的函数名,只要该函数计算出来的结果即可。

现在我有一个数据:   Array(List(("a",11),("b",2),("b",3)) )

想要输出OUT结果为:  Map(a->(1,11),b->(2,5))   

1,2分表表示a,b出现的次数;

11,5分别表示a,b对应数字的和。

接下来我就可以如下编写,并得到如下结果:

 

/**
 * @author:码到成龚
 * my motoo:"听闻少年二字,应与平庸相斥。"
 * 个人代码规范:
 * 1,原始数据的变量命名:①只使用单个单词即数据的类型:无嵌套的数据结构②被嵌套的数据结构类型_嵌套的数据结构类型:嵌套的数据结构
 * 2,接收结果的变量命名:①包含的数据类型1_包含的数据类型2_返回的变量类型_表达式中使用到的函数1_表达式中使用到的函数2
 * 3,调用函数时的注释:①数据调用第一个函数输出的结果为:函数名-OUT;函数名-OUT....以此类推
 *
 */
object Func1 {
  def main(args: Array[String]): Unit = {
    val list_arr=Array(List(("a",11),("b",2),("b",3)) )// 数组中嵌套列表
    /*
    输出OUT:Map(a->(1,11),b->(2,5))    字母对应的数字相加,并返回map集合序列
   ·   */
    println(list_arr.flatten.toList.groupBy(
      /*打印出来的数组为对象地址,需要转成list或者是可变数组才能够看到里面的数据元素:toList
      先将同一个字母分组到一起,之后得到字典集合序列:groupBy
       */
      f=>f._1   // 匿名函数,表示元组中的第一个元素
    ).mapValues(
      list=>(list.size,list.map(
        f=>f._2   // 匿名函数
      ).sum)
      /*
      使用mapValues对字典map集合序列的数据进行处理,返回元组类型:mapvalues
      元组中的第一个元素为嵌套在数组中对应的每一个列表的长度:size
      元组中的第二个元素为字母对应的数字和:sum
       */
    ))
    // 匿名函数:(变量名1:变量类型,变量名2:变量类型)=>{函数体}
    // 函数:val 函数名:(参数类型1,参数类型2)=>函数返回值类型=(参数名1:参数类型,参数名2:参数类型)=>{函数体}

  }
}

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

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

相关文章

澳亚集团通过聆讯:毛利率波动,预计利润将下滑,陈荣南为董事长

撰稿|汤汤 来源|贝多财经 近日&#xff0c;港交所披露的信息显示&#xff0c;澳亚集团有限公司&#xff08;下称“澳亚集团”&#xff09;通过港交所聆讯&#xff0c;并披露了聆讯后资料集&#xff08;即招股书&#xff09;&#xff0c;中金公司和星展银行&#xff08;DBS&am…

如何从 Power BI 示例中获取数据以供练习

如果您是 Power BI 初学者, Microsoft Power BI 教程中提供的示例是入门的好地方。 在这篇文章中,我将按照步骤在 excel 中查看示例数据,以便您可以将这些数据用于练习目的。 下载 Excel 文件 首先,在浏览器中打开人力资源数据。文包含有关如何使用数据构建 Power BI 报…

不是我穷,是他真的很好用!

今天猫猫为您推荐一款良心vx小程序——喵盐配音&#xff01;利用小程序的特性&#xff0c;无需安装&#xff0c;即走即用。 这个配音软件超多功能&#xff0c;太强大了&#xff01;操作简单&#xff0c;输入文本&#xff0c;一键配音&#xff0c;小白也会用超多声音主播&#…

12月8日绿健简报,星期四,农历十一月十五

12月8日绿健简报&#xff0c;星期四&#xff0c;农历十一月十五1. 中国铁路&#xff1a;即日起购票乘车及进出站停止查验核酸和健康码&#xff1b;联防联控机制&#xff1a;不再对跨地区流动人员查验健康码&#xff0c;无症状和轻型病例一般采取居家隔离。2. 包头&#xff1a;交…

torchnet 简单使用文档

torchnet 是用于 torch 的代码复用和模块化编程的框架&#xff1a; 主要包含4个部分&#xff1a; Dataset&#xff1a;各种不同方式处理数据。Engine:各种机器学习算法Meter:性能度量指标。 Log&#xff1a;Log&#xff1a;Log&#xff1a; 模块详细分为如下部分&#xff1a;D…

FLStudio2023电脑版安装下载及fl21版本新功能介绍

FL Studio水果简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;国人习惯叫它"水果"。软件现有版本是 FL Studio 21&#xff0c;已全面升级支持简体中文语言界面 。FL Studio 能让你的计算机就像是全功能的录音室一样&#xff0c;完成编曲、剪辑、…

YourKit Profiler for .NET功能和内存一体探查器

YourKit Profiler for .NET功能和内存一体探查器 Windows和Linux的简单易用内存和性能.NET探查器。 功能和内存一体的.NET探查器 远程和本地评测各种.NET Center和.NET设计应用程序、服务器和Windows服务。 探索测试、开发和制造环境中的性能问题。 与Visual Studio和JetBrains…

一键式开启:IDaaS 日志接入 SLS日志审计发布

背景 什么是IDaaS 应用身份服务IDaaS(Identity as a Service)是阿里云原生身份管理系统&#xff0c;可以统一管理各应用中分散的账号&#xff0c;并集中分配应用访问控制权限&#xff0c;降低低效、重复的账号访问配置和运维工作。IDaaS 旗下的EIAM&#xff08;Enterprise IA…

java计算机毕业设计ssm乡村疫情防控管理系统37804(附源码、数据库)

java计算机毕业设计ssm乡村疫情防控管理系统37804&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

时间都去哪了?

在很长一段时间我并不知道怎么去平衡速率和质量之间的关系&#xff0c;我虽然看过不少书和文章告诉我只有保证质量才能保证速率&#xff0c;但我还没有见过反例&#xff0c;我没办法很好地说服别人&#xff0c;我只能看着他们义无反顾的冲向进度&#xff0c;然后抱怨时间不够。…

大数据hadoop_HDFS的shell操作(2)

文章目录1. 基本语法2. hadoop hdfs命令指南3. 常用命令操作指南3.1 准备工作3.2 上传3.3 下载3.4 基本操作1. 基本语法 hadoop fs 具体的命令 或者 hdfs dfs 具体的命令一般是使用hadoop fs 具体的命令&#xff0c;因为是简单好记&#xff0c;容易理解。 2. hadoop hdfs命令…

TypeScript 开发环境搭建

TypeScript是JavaScript类型的超集&#xff0c;它可以编译成纯JavaScript代码&#xff0c;TypeScript可以在任何浏览器&#xff0c;任何计算机和任何操作系统上运行。 目录 依赖环境 搭建步骤 1.新建一个文件夹 2.初始化一个NPM项目 3.安装typescript 包 4.新建一个tscon…

SQLite 基本命令使用方式

本文介绍创建一个简单的数据库&#xff0c;并能够在需要的时间和地点快速使用它们。SQLite 在世界范围内的许多设备中使用。 什么是SQLite&#xff1f; SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的…

Spring Cloud Alibaba整合Sentinel进行服务熔断降级

一、下载Sentinel Dashboard控制台服务 Releases alibaba/Sentinel GitHub 一样的&#xff0c;根据自己的Spring Cloud Alibaba版本下载相应版本的Sentinel 启动服务&#xff0c;可以指定端口 java -Dserver.port8849 -Dcsp.sentinel.dashboard.serverlocalhost:8849 -Dp…

记录下QT读取串口数据时遇到的问题

一、如果使用QT读取串口数据 使用定时器定时发送信号&#xff0c;然后调用槽函数来读取串口数据&#xff0c;串口数据读取过程加锁。 timer1 startTimer(15); connect(this, SIGNAL(callCapData()), this, SLOT(CapData()));void ecgfrom::timerEvent(QTimerEvent *event) {…

Allegro如何批量把器件放在指定的格点上操作指导

Allegro如何批量把器件放在指定的格点上操作指导 Allegro支持批量把器件放在指定的格点上,具体操作如下 以下图为例,器件在小数点位以后的格点上,如果只是个别器件,只需要切换好格点,并且手动移动下就可以了,如果有大量的器件都是这样,这样会比较费时 选择File-change…

Java中注解的理解

一.什么是注解 1.Annotation是从JDK5开始引入的最新技术 2.Annotation的作用&#xff1a; 1&#xff09;不是程序本身&#xff0c;可以对程序做出解释&#xff0c;(这一点和注释(comment)没什么区别)。 2&#xff09;可以被其他程序&#xff08;比如编译器&#xff09;读取…

【论文随笔】Time-Incremental Learning from Data Using Temporal Logics

[1] E. Aasi, M. Cai, C. I. Vasile, and C. Belta, “Time-Incremental Learning from Data Using Temporal Logics.” arXiv, Dec. 28, 2021. doi: 10.48550/arXiv.2112.14300. 好久没看文献了&#xff0c;来更一篇 Outline time-variant weights of STL weights are learn…

【Windows基础】Windows用户和用户组的管理

一、用户账户 什么是用户账户&#xff1f; 不同的用户身份拥有不同的权限每个用户包含了一个名称和一个密码每一个用户登录系统后&#xff0c;拥有不同的操作权限。为不同的账户赋权限&#xff0c;也就是为不用账户的SID赋权限&#xff01;每个用户都有自己的配置文件(家目录…

opcj1——mac下如何快速搭建Java开发环境

这是我们OPCJ的第一篇&#xff0c;搭建基础的开发环境。我们的服务会不断增加新组件&#xff0c;我们这里先介绍如何快速搭建开发环境。一般来说Java程序员的电脑上总是会有一些已经配置好的idea、git、maven或者其他的&#xff0c;如果有的话&#xff0c;调整一下直接用就行了…