当前位置: 首页 > news >正文

11.scala函数进阶

目录

  • 概述
  • 函数
    • scala函数和方法的区别
      • 第一种
      • 第二种
      • 方法转函数
    • 函数柯里化
  • 结束

概述

函数 vs 方法

  • 1.定义
    • 方法:def
    • 函数:=>
  • 2.方法本质上是一个特殊的函数
  • 3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值

函数

scala函数和方法的区别

第一种

var/val 函数名称 = (参数列表) => {函数体}

object FunctionDemo {def main(args: Array[String]): Unit = {test01()}/*** 函数定义:第一种* var/val 函数名称 = (参数列表) => {函数体}*/def test01() = {// f1:函数名称// (Int,Int) :参数列表// 返回值val f1 = (a: Int, b: Int) => {a + b}println(f1(4, 5))}
}

执行结果如下:
在这里插入图片描述

第二种

val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}

object FunctionDemo {def main(args: Array[String]): Unit = {test02()}/*** 函数的定义方式二* val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}*/def test02(): Unit = {val f2: (Int, Int) => Int = (a: Int, b: Int) => {a + b}val f3: (Int, Int) => Int = (a, b) => {a + b}println(f2(3, 2))}
}

执行结果如下:
在这里插入图片描述

方法转函数

在Scala中,方法本身并不是值,而是函数。因此,一个方法不能直接赋值给一个val变量,但是可以将方法转换为函数并进行赋值。

object FunctionDemo {def main(args: Array[String]): Unit = {test03()}def test03(): Unit = {def sayHello(name: String): Unit = {println(s"Hell:$name")}// 将方法赋值给一个函数、变量:空格 下划线// 下划线 总结val sayHelloFunc = sayHello _sayHelloFunc("测试方法变函数")def add(a: Int, b: Int) = a +  bval add1 = add _println(add1(1, 2))val add2: (Int, Int) => Int = add// 将函数当方法的参数def foo(op:(Int,Int) => Int) = {op(10, 20)}println(foo(add2))def foo2(op:()=>Unit)={op()}def m =println("hello world")foo2(m _)}
}

执行结果:
在这里插入图片描述

函数柯里化

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数

来看一下 js 中的柯里化与 scala 的实现区别。

// 非柯里化
function add(x, y) {return x + y;
}add(1, 2) === 3; // true// 柯里化
function addX(y) {return function(x) {return x + y;};
}addX(2)(1) == 3; // true
object FunctionDemo {def main(args: Array[String]): Unit = {test05()}def test05(): Unit ={def isEq(x:String)(y:String)={x.toLowerCase == y.toLowerCase}println(isEq("A")("B"))println(isEq("A")("a"))}
}

执行结果如下:
在这里插入图片描述

结束

scala函数和方法的区别 至此结束,如有疑问,欢迎评论区留言。

相关文章:

11.scala函数进阶

目录 概述函数scala函数和方法的区别第一种第二种方法转函数 函数柯里化 结束 概述 函数 vs 方法 1.定义 方法:def函数:> 2.方法本质上是一个特殊的函数3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值…...

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类,通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis,在…...

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题:顾客满意是顾客对一件产品满足…...

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)

文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例:区块链在金融领域的发展10.1.3 拓展案例 1:区块链在供应链管理中的应用10.1.4 拓展案例 2:区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…...

JVM工作原理与实战(三十一):诊断内存泄漏的原因

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、诊断原因 二、MAT内存泄漏检测的原理 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线…...

#{}和${}的区别

#{}和${}的区别 .本质区别:使用注意事项防止SQL注入排序like查询 . 在使用mybatis操作数据库的时候,我们在编写sql语言的时候,会遇到一个问题,就是在传参的时候,有两个符号#,$.这两个符号有什么异同呢,接下来,我就会带着大家对这个问题进行简单的探讨 本质区别: #执行的是预编…...

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 (1)树(Tree)是 n(n ≥\geq 1)个节点的有限集,n 0时称…...

扩展坞 接两个显示器

笔记本电脑如何外接两个显示器,达到三个屏同时显示? 3 笔记本有 2 个显示扩展接口 目前笔记本中最常见的就是 1 个 HDMI 口 1 个支持 DP 协议的 Type-C 口或 2 个支持 DP 协议的 Type-C 口,此时使用 HDMI 线和 Type-C 转接线分别直连两台显…...

鸿蒙 ArkTS 从数组内查找指定的数据

let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者: 首先,我要感谢您抽出宝贵的时间阅读这篇文章。我深知,您的每一分每一…...

qemu 抓取linux kernel vmcore

一、背景 在qemu调试linux kernel时 有时我们会遇到dump 情况,这时可以通过gdb 方式连接分析dump, 但实际中我们用得更多的是离线dump 分析,分析的文件通常是vmcore(linux kernel panic 生成的coredump文件)或者ramdu…...

RabbitMQ 死信队列应用

1. 概念 死信队列(Dead Letter Queue)是在消息队列系统中的一种特殊队列,用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”,例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时,…...

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官,我深刻理解只有养猫人才懂的困扰,那就是家里到处都是猫毛和异味。我发现自从开始养猫之后,家里的空气质量变得不佳。猫毛和皮屑飞扬,而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…...

有趣的css - 好看的呼吸灯效果

整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading&#xff0c;也可以放在网站首屏当一个 banner 的背景也是非常棒的&#xff01; 代码部分 html 部分代码&#xff1a; <div class"app"><span class&quo…...

二叉树-堆应用(1)

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆&#xff08;直…...

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…...

线程池相关的类学习

Executor public interface Executor {//执行任务void execute(Runnable command); }ExecutorService public interface ExecutorService extends Executor {//关闭线程池&#xff0c;不能再向线程池中提交任务&#xff0c;已存在与线程池中的任务会继续执行&#xff0c;直到…...

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以&#xff0c;我们要重视所有可能影响 Redis 性能的因素&#xff08;如命令操作、系统配置、关键机制、硬件配置等&#xff09;。 影响 Redis 性能的 5 大方面的潜在因素分别是&#xff1a; Redis 内部的阻塞式操作C…...

如何在 JavaScript 中使用 map() 迭代数组

简介 从经典的 for 循环到 forEach() 方法&#xff0c;JavaScript 中有各种技术和方法用于遍历数据集。其中最流行的方法之一是 .map() 方法。.map() 通过在父数组的每个项目上调用特定函数来创建一个数组。.map() 是一个非变异方法&#xff0c;它创建一个新数组&#xff0c;而…...

学习JavaEE的日子 Day19 常用类

Day19 1.包装类的使用 理解&#xff1a;8种基本数据类型对应类 出现原因&#xff1a; ​ Java为纯面向对象语言(万物皆对象)&#xff0c;8种基本数据类型不能new对象&#xff0c; ​ 就破坏Java为纯面向对应语言的特征&#xff0c;Java又为8种基本数据类型分别 ​ 匹配了对应的…...

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…...

幻兽帕鲁启动提示 msvcp140.dll 丢失怎么办?2026最新解决办

心问题&#xff1a; 在 Steam 或其他平台启动《幻兽帕鲁》&#xff08;Palworld&#xff09;时&#xff0c;系统弹出“由于找不到 msvcp140.dll&#xff0c;无法继续执行代码”的错误提示&#xff0c;导致游戏无法进入。 简短回答&#xff1a; 幻兽帕鲁 msvcp140.dll 报错的主…...

OFA模型在VMware虚拟机中的开发测试环境搭建

OFA模型在VMware虚拟机中的开发测试环境搭建 对于很多刚接触AI模型开发的个人开发者或学生来说&#xff0c;最大的门槛往往不是算法本身&#xff0c;而是硬件。一块性能足够的独立GPU价格不菲&#xff0c;让很多人在起步阶段就望而却步。难道没有物理GPU&#xff0c;就真的没法…...

Calypso vs PC-DMIS:三坐标两大软件脱机编程实战对比与选型指南

Calypso vs PC-DMIS&#xff1a;三坐标测量软件脱机编程深度对比与实战选型策略 在精密制造领域&#xff0c;三坐标测量机(CMM)的脱机编程能力直接决定了检测效率与资源利用率。作为行业两大标杆&#xff0c;蔡司Calypso与海克斯康PC-DMIS在用户界面设计、编程逻辑、仿真验证等…...

PXE装机避坑大全:从TFTP根目录设置到Kickstart无人值守的13个常见错误修复

PXE装机避坑大全&#xff1a;从TFTP根目录设置到Kickstart无人值守的13个常见错误修复 在企业级IT运维中&#xff0c;PXE&#xff08;预启动执行环境&#xff09;网络装机技术因其高效、自动化的特点&#xff0c;已成为服务器批量部署的标配方案。但看似简单的PXE部署流程背后&…...

终极URL标准完整指南:从基础概念到实战应用

终极URL标准完整指南&#xff1a;从基础概念到实战应用 【免费下载链接】url URL Standard 项目地址: https://gitcode.com/gh_mirrors/url/url URL&#xff08;统一资源定位符&#xff09;是互联网的基石&#xff0c;每一个网页、图片、视频都通过URL来定位和访问。URL…...

别再手动调时间了!手把手教你用LinuxPTP的ptp4l和phc2sys搞定TSN网络时钟同步

工业TSN网络高精度时钟同步实战&#xff1a;从原理到生产环境部署 在工业自动化、智能驾驶和实时音视频传输领域&#xff0c;微秒级的时间同步已成为刚需。传统NTP协议毫秒级的精度在这些场景下显得力不从心&#xff0c;而基于IEEE 1588和802.1AS协议的PTP&#xff08;精确时间…...

从单张图片到动态世界:Depth-Anything-3如何重塑3D视觉的通用法则

1. 当单张图片学会"思考"深度 第一次看到Depth-Anything-3&#xff08;DA3&#xff09;处理一张普通照片时&#xff0c;我盯着屏幕足足愣了三分钟。它就像给二维世界突然装上了Z轴——原本平淡无奇的街景照片&#xff0c;在DA3的解构下&#xff0c;近处的咖啡杯轮廓清…...

springboot+vue基于web的在线投稿系统的设计与开发

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析审稿流程模块系统管理模块技术实现要点项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户管理模块 注册与登录…...

3DGS训练完模型怎么可视化?手把手教你用官方Viewer在Windows上查看结果

3DGS训练完模型怎么可视化&#xff1f;手把手教你用官方Viewer在Windows上查看结果 当你花费数小时甚至数天时间在Linux服务器上完成3D高斯泼溅(3DGS)模型的训练后&#xff0c;最令人兴奋的时刻莫过于亲眼看到自己的训练成果。本文将详细介绍如何将训练好的模型从Linux服务器迁…...

XBeeATCmds库:Arduino嵌入式AT命令封装实践

1. XBeeATCmds 库概述&#xff1a;面向嵌入式开发者的 AT 命令封装实践XBeeATCmds 是一个专为 Arduino 平台设计的轻量级 C 封装库&#xff0c;其核心目标是将 Digi XBee 系列模块&#xff08;包括 Series 1、Series 2/2B、Series 3 及兼容 Zigbee、802.15.4、DigiMesh 协议的模…...