09_Scala函数和对象

文章目录

  • 函数和对象
  • 1.函数也是对象 scala中声明了一个函数 等价于声明一个函数对象
  • 2.将函数当作对象来用,也就是访问函数,但是不执行函数结果
  • 3.对象拥有数据类型(函数类型),对象可以进行赋值操作
  • 4.函数对象类型的省略写法,也就是将函数定义时的: 变为=> ,其次形参列表仅保留变量类型
  • 5.Scala将对象作为参数,传入到另一个函数中,作为参数使用
  • 6.特殊情况函数当作对象使用,下划线可省; 函数以函数对象作为形参,统一下划线可省;
  • 7.形参为函数对象的 匿名写法
  • 8.Scala也可以将函数对象作为结果返回;

函数和对象

scala万物皆对象
scala是完全面向函数式编程语言,万物皆函数

1.函数也是对象 scala中声明了一个函数 等价于声明一个函数对象

//    1.TODO 函数也是对象    scala中声明了一个函数 等价于声明一个函数对象def fun01()={}println(fun01)    //()    //调用时省略小括号

2.将函数当作对象来用,也就是访问函数,但是不执行函数结果

//    2.TODO 将函数当作对象来用,也就是访问函数,但是不执行函数结果println(fun01 _)    //_07函数和对象.Demo01$$$Lambda$5/245672235@4cdbe50fprintln((fun01 _).toString())    //_07函数和对象.Demo01$$$Lambda$6/2114694065@6debcae2

3.对象拥有数据类型(函数类型),对象可以进行赋值操作

  • 函数类型Function0[Unit] 0表示函数参数列表的个数
  • 中括号中 表示函数没有返回值;
  • 如果有一个参数有返回值的 函数类型 -->
  • def fun02(age:Integer):String={“zhangsan”}
  • var f1:Function1[Integer,String] = fun02 _ //Integer表示函数形参的类型,String表示函数返回值类型
  • 函数对象的参数最多支持22个 , 函数的参数的个数是无限个; //谁没事会写这么多?
var f:Function0[Unit] = fun01 _
println()def fun02(age:Integer):String={"zhangsan"}
var f1:Function1[Integer,String] = fun02 _
var f2:Function1[Integer,String] = fun02    //下划线可省
f2 = fun02    //下划线可省

4.函数对象类型的省略写法,也就是将函数定义时的: 变为=> ,其次形参列表仅保留变量类型

    def fun03(name:String,age:Integer):Unit={println("xxx")}val f3:(String,Integer)=>Unit = fun03 _     //形参列表仅一个参数则,小括号可省//    且函数对象 可以直接执行f3("zhangsan",18)     //xxxf3      //这写法啥也不是没用   .函数可以省略(),但是对象不能省略()

5.Scala将对象作为参数,传入到另一个函数中,作为参数使用

//    案例:将test函数中传入User对象def sum(x:Int,y:Int):Int={x+y}def diff(x:Int,y:Int):Int={x-y}def test(f: (Int,Int)=>Int):Unit={val result = f(10, 20)println(result)}//基本调用println(sum(20, 30))    //50test(sum)     //30      //将函数对象作为参数使用,将我们的逻辑进行传递,但是逻辑不用写死;test(diff)    //-10      //使用什么逻辑作者来顶,内部执行即可;

6.特殊情况函数当作对象使用,下划线可省; 函数以函数对象作为形参,统一下划线可省;

  • 使用下划线的目的就是使函数不执行,而是当作对象使用,如果明确知道函数不执行,使用下划线即可;

  • 小结:只要明确形参是函数对象,下划线都可去*

7.形参为函数对象的 匿名写法

    test((x:Int,y:Int)=>{x+y})//匿名写法也就是调用函数的时候直接定义函数对象;仅保留形参列表 和 函数体,中间使用=>连接//    7.1同 函数的定义,函数的方法若仅有一行,那么花括号可以省略test((x:Int,y:Int)=> x+y)
//    7.2函数的参数类型由于和 test形参一致,所以参数类型可省     //关于小括号都别省test((x,y)=> x+y)//    7.3如果参数按照顺序只执行一次,那么可以使用下划线代替参数,省略参数列表test(_ + _)test(_ - _)   //下划线就表示第一参数,以此类推;

特殊情况:下划线不能嵌套使用

在这里插入图片描述

上述代码无法区分,下划线是作用println函数还是test函数

8.Scala也可以将函数对象作为结果返回;

    def outer()={def inner(): Unit = {println("inner")}inner _   //作为对象返回必须加下划线}var f11 = outer()f11()//    8.1特殊调用方法outer()()   //看上述代码 outer()其实就是f11 对象,对象加括号就可以执行函数逻辑

全局代码

package _07函数和对象object Demo01 {def main(args: Array[String]): Unit = {/**scala万物皆对象scala是完全面向函数式编程语言,万物接函数->  函数就是对象,对象就是函数1.函数也是对象    scala中声明了一个函数 等价于声明一个函数对象2.将函数当作对象来用,也就是访问函数,但是不执行函数结果3.对象拥有数据类型(函数类型),对象可以进行赋值操作4.函数对象类型的省略写法,也就是将函数定义时的: 变为=> ,其次形参列表仅保留变量类型5.Scala将对象作为参数,传入到另一个函数中,作为参数使用6.特殊情况函数当作对象使用,下划线可省;  函数以函数对象作为形参,统一下划线可省;7.形参为函数对象的 匿名写法8.Scala也可以将函数对象作为结果返回;*///    1.TODO 函数也是对象    scala中声明了一个函数 等价于声明一个函数对象def fun01()={}println(fun01)    //()    //调用时省略小括号//    2.TODO 将函数当作对象来用,也就是访问函数,但是不执行函数结果println(fun01 _)    //_07函数和对象.Demo01$$$Lambda$5/245672235@4cdbe50fprintln((fun01 _).toString())    //_07函数和对象.Demo01$$$Lambda$6/2114694065@6debcae2//    3.将函数对象赋值给变量    如何查看f的类型/*** 函数类型Function0[Unit]      0表示函数参数列表的个数* 中括号中 表示函数没有返回值;** 如果有一个参数有返回值的 函数类型    -->* def fun02(age:Integer):String={"zhangsan"}* var f1:Function1[Integer,String] = fun02 _     //Integer表示函数形参的类型,String表示函数返回值类型* 函数对象的参数最多支持22个 , 函数的参数的个数是无限个;   //谁没事会写这么多?*/var f:Function0[Unit] = fun01 _println()def fun02(age:Integer):String={"zhangsan"}var f1:Function1[Integer,String] = fun02 _var f2:Function1[Integer,String] = fun02    //下划线可省f2 = fun02    //下划线可省//    4.函数对象类型赋值的简单写法   函数对象类型的省略写法,也就是将函数定义时的: 变为=> ,其次形参列表仅保留变量类型def fun03(name:String,age:Integer):Unit={println("xxx")}val f3:(String,Integer)=>Unit = fun03 _     //形参列表仅一个参数则,小括号可省//    且函数对象 可以直接执行f3("zhangsan",18)     //xxxf3      //这写法啥也不是没用   .函数可以省略(),但是对象不能省略()//    5.Scala将对象作为参数,传入到另一个函数中,作为参数使用;
//    案例:将test函数中传入User对象def sum(x:Int,y:Int):Int={x+y}def diff(x:Int,y:Int):Int={x-y}def test(f: (Int,Int)=>Int):Unit={val result = f(10, 20)println(result)}//基本调用println(sum(20, 30))    //50test(sum)     //30      //将函数对象作为参数使用,将我们的逻辑进行传递,但是逻辑不用写死;test(diff)    //-10      //使用什么逻辑作者来顶,内部执行即可;//    6.特殊情况函数当作对象使用,下划线可省/*** 使用下划线的目的就是使函数不执行,而是当作对象使用,如果明确知道函数不执行,使用下划线即可;** 小结:只要明确形参是函数对象,下划线都可去**///    7.形参为函数对象的 匿名写法如下test((x:Int,y:Int)=>{x+y})//匿名写法也就是调用函数的时候直接定义函数对象;仅保留形参列表 和 函数体,中间使用=>连接//    7.1同 函数的定义,函数的方法若仅有一行,那么花括号可以省略test((x:Int,y:Int)=> x+y)
//    7.2函数的参数类型由于和 test形参一致,所以参数类型可省     //关于小括号都别省test((x,y)=> x+y)//    7.3如果参数按照顺序只执行一次,那么可以使用下划线代替参数,省略参数列表   ;但是不能嵌套使用test(_ + _)test(_ - _)   //下划线就表示第一参数,以此类推;//    8.Scala也可以将函数对象作为结果返回;def outer()={def inner(): Unit = {println("inner")}inner _   //作为对象返回必须加下划线}var f11 = outer()f11()//    8.1特殊调用方法outer()()   //看上述代码 outer()其实就是f11 对象,对象加括号就可以执行函数逻辑}}

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

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

相关文章

HTML+CSS从入门到精通(三)

&#xff08;9&#xff09;右侧搜索框 <!--这里就是表示HTML5--><!DOCTYPE html><html lang"zh" xmlns:th"http://www.thymeleaf.org"xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml&…

变电站综合自动化系统:Modbus-PLC-645转IEC104网关方案

前言 电力行业作为关系国计民生的重要基础产业&#xff0c;是关系千家万户的公用事业。但是要做好电力行业安全保障工作的前提&#xff0c;是需要对应的技术人员详细了解电力工业使用的系统、设备以及各类协议的安全特性&#xff0c;本文将主要介绍IEC 104协议的定义和钡铼技术…

mac用Homebrew安装MySQL并配置远程登录

1. 简介 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;后被 Oracle 公司收购。MySQL 使用 SQL&#xff08;Structured Query Language&#xff09;作为查询语言&#xff0c;并提供了强大的功能和性能…

Vue组合式API进阶:深入了解进阶API

目录 引言 进阶API介绍 1.shallowRef() 2.triggerRef() 3.customRef () 4.toRow() 引言 在Vue 3中&#xff0c;组合式API为开发者提供了更加灵活和直观的方式来组织和管理组件的逻辑。除了基础的ref和reactive之外&#xff0c;Vue还提供了许多高级API函数&#xff0c;帮助我…

C++——STL容器——vector

vector是STL容器的一种&#xff0c;和我们在数据结构中所学的顺序表结构相似&#xff0c;其使用和属性可以仿照顺序表的形式。vector的本质是封装了一个动态大小的数组&#xff0c;支持动态管理容量、数据的顺序存储以及随机访问。 1.前言说明 vector作为容器&#xff0c;应该…

深入理解C++中的仿函数(Functors)

在C中&#xff0c;仿函数或函数对象是通过重载operator()的类实例来模拟函数行为的对象。这种特性使得C的对象可以像函数一样被调用&#xff0c;从而为编程提供了极大的灵活性和强大的功能。 1. 什么是仿函数&#xff1f; 仿函数是一个类&#xff0c;它定义了一个或多个opera…

【设计模式】使用策略模式优化表单校验逻辑

什么是策略&#xff1f; 所谓策略&#xff0c;就是根据已知条件决定要做出怎样的行为。 举个栗子&#xff1a;我要实现一个表单校验功能&#xff0c;要求 name 不能为空且长度必须大于 2 且小于 4&#xff0c;age 不能为空且必须为纯数字。 这样的判断逻辑直接用 if-else 就…

安全再升级,亚信安慧AntDB数据库与亚信安全二次牵手完成兼容性互认证

日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;的产品与亚信科技&#xff08;成都&#xff09;有限公司&#xff08;简称&#xff1a;亚信安全&#xff09;再次携手&#xff0c;完成亚信安慧AntDB数据库与亚信安全IPoE接入认证系统…

R和Python市场篮分析算法及行为分析模型

&#x1f3af;要点 行为数据分析&#xff1a;&#x1f3af;线性统计研究生学业表现&#xff1a;&#x1f58a;绘制测试分数配对图 | &#x1f58a;构建简单线性回归模型&#xff0c;拟合数据 | &#x1f58a;构建多线性回归&#xff0c;三维可视化数据拟合模型 | &#x1f58a…

重学数论1:不定方程的引入

研究的对象&#xff1a;不定方程 文章目录 研究的对象&#xff1a;不定方程不定方程引入&#xff1a;裴蜀定理证明&#xff1a;欧几里得算法证明&#xff1a;充分性证明&#xff1a;必要性证明&#xff1a; 战术总结&#xff1a; 不定方程引入&#xff1a; 不定方程&#xff0…

「 网络安全常用术语解读 」SBOM主流格式SPDX详解

SPDX&#xff08;System Package Data Exchange&#xff09;格式是一种用于描述软件组件&#xff08;如源代码&#xff09;的规范&#xff0c;它提供了一种标准化的方法来描述软件组件的元数据&#xff0c;包括其许可证、依赖项和其他属性。SPDX最初由Linux基金会于2010年发起&…

复旦微JFM7VX690计算后IO接口模块,用于雷达信号处理、数据处理等需要高速密集计算的应用场景

计算后IO接口模块 1 介绍 1.1 产品概述 计算后IO接口模块主要由复旦微JFM7VX690型FPGA、国产以太网收发器YT8521、国产BMC芯片GD32F450、国产CPLD芯片EF2L45BG256B、国产内存颗粒等主要芯片组成&#xff0c;采用标准6U VPX尺寸设计。 本计算后IO接口模块主要用于雷达信号处…

Java面试八股之Java中数组有没有length()方法?String呢?为什么?

Java中数组有没有length()方法&#xff1f;String呢&#xff1f;为什么&#xff1f; 数组&#xff1a; 数组没有名为length()的方法&#xff0c;但有一个属性叫做length。可以通过数组名直接访问这个属性来获取数组的长度&#xff08;即元素个数&#xff09;。这是一个整数值&…

《Redis使用手册之有序集合》

《Redis使用手册之有序集合》 目录 **《Redis使用手册之有序集合》****ZADD&#xff1a;添加或更新成员****ZREM&#xff1a;移除指定的成员****ZSCORE&#xff1a;获取成员的分值****ZINCRBY&#xff1a;对成员的分值执行自增或自减操作****ZCARD&#xff1a;获取有序集合的大…

【redis】Redis数据类型(三)List类型

目录 List类型介绍特点 List数据结构附&#xff1a;3.2以前的版本(介绍一下压缩列表和双向链表)压缩列表ZipList双向链表LinkedList 常用命令lpush示例 lpushx示例 rpush示例 rpushx示例 LPOP示例 RPOP示例 BLPOP非阻塞行为阻塞行为相同的 key 被多个客户端同时阻塞在 MULTI/EX…

[笔试强训day06]

文章目录 NC10 大数乘法NC1 大数加法NC40 链表相加(二) NC10 大数乘法 NC10 大数乘法 #include <string> #include <vector> class Solution {public:string solve(string s, string t) {int m s.size(), n t.size();reverse(s.begin(), s.end());reverse(t.beg…

Matlab图像处理——基于BP神经网络的车牌标识识别系统

1. 数据集介绍 中国交通标志数据集&#xff1a; https://nlpr.ia.ac.cn/pal/trafficdata/detection.html 该数据集包含58类交通标志。 2. 数据处理 按照文件标签&#xff0c;将数据集划分了58类&#xff0c;如下&#xff1a; 对应的类别信息记录如下&#xff1a; 限速5km/…

2024 一带一路暨金砖国家技能发展与技术创新大赛【企业信息系统安全赛项】选拔赛样题

2024 一带一路暨金砖国家技能发展与技术创新大赛--企业信息系统安全赛项任务书 第一阶段&#xff1a; CTF 夺旗任务一 WEBCMS任务二 杂项 MISC任务三 Linux 应急响应分析任务四 Baby_PWN任务五 流量溯源 第二阶段&#xff1a; 企业网络安全配置与渗透需要2023环境私信博主&…

element-plus中使用el-switch时,用‘0,1’或者0,1来代替true,false绑定

介绍 switch 开关默认用 true, false来绑定的&#xff0c;但是在实际的项目中&#xff0c;有时候根据后端的接口返回&#xff0c;也可能会用字符串0 和 1 &#xff0c;或者数字 0,1来代替; 具体实现如下 详情&#xff1a; 主要实现方式是通过使用el-switch组件里的 active-val…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒处理建议

在网络技术不断发展的时代&#xff0c;网络在企业中的应用广泛&#xff0c;可以为企业带来更多的便利&#xff0c;大大提升了企业的生产效率&#xff0c;但网络作为虚拟世界&#xff0c;在为企业提供便利的同时&#xff0c;也为企业数据安全带来严重威胁。近期&#xff0c;云天…