12.scala下划线使用总结

news2024/10/4 16:11:55

目录

  • 概述
  • 实践
    • 变量初始化
    • 导包引入
    • 方法转变为函数
    • 用户访问Tuple元素
    • 简化函数参数传递
    • 定义偏函数
    • 变长参数
  • 结束

概述

实践

变量初始化

在Scala中,变量在声明时需要显式指定初始值。可以使用下划线为变量提供初始值,但这种语法仅限于成员变量,不适用于局部变量

导包引入

使用下划线_可以导入整个包及其子包下的所有内容,类似于Java中的*。例如,如果你想要导入Java中的java.lang.Math,你可以使用import math._

方法转变为函数

在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("测试方法变函数")
  }
}

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

用户访问Tuple元素

通过使用下划线,可以直接访问Tuple中的元素。

简化函数参数传递

当函数的参数仅出现一次且参数的类型已知时,可以使用下划线代替参数名称。

object FunctionDemo {
  def main(args: Array[String]): Unit = {
    test04()
  }
  def test04(): Unit ={
    def foo3(add:(Int,Int)=> Int): Unit ={
      println(add(10, 20))
    }
    foo3(_ + _)
  }
}

注意:

  • 第一个 _ 表示第一个参数
  • 第二个 _ 表示第二个参数
  • 每个参数只能使用一次

定义偏函数

偏函数允许将多个参数函数的一部分调用作为单独的函数进行处理。

def test07(): Unit = {
  def sum(a:Int,b:Int): Int ={
    a + b
  }
  //s就是偏函数,绑定第一个 a 参数,第二个参数使用下划线 _ 替换缺失的参数列表
  val s = sum(1 , _:Int)
  println(s(2))
}

相加方法,先固定第一参数的值,变成只需投第二个参数的函数,再调用,结果如下:
在这里插入图片描述

变长参数

def test06(): Unit = {
  def sum(args: Int*) = {
    var result = 0
    for (arg <- args) {
      result += arg
    }
    result
  }

  println(sum(1 to 5: _*))
}

结束

scala下划线使用总结 至此结束,如有疑问,欢迎评论区留言。

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

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

相关文章

抠门精出游记第三天

熊野古道&#xff0c;最早我是在新加坡地铁站看到的日本旅游广告上出现的&#xff0c;我觉得以前很多次自由行都是打卡式的&#xff0c;觉得确实需要一些深度游&#xff0c;而且趁着身体状态还可以&#xff0c;反正就这么种草了。 然后小红书上看到不少有关行程介绍&#xff0c…

npm i 遇到了 npm ERR! code CERT_HAS_EXPIRED

npm i 遇到了 npm ERR! code CERT_HAS_EXPIRED 更新你的系统时间【命令 date】。确保你的计算机上的时间和时区设置正确&#xff0c;并且与当前时间相符。 清除你的 npm 缓存。使用 npm cache clean --force 命令清除你的 npm 缓存&#xff0c;关闭ssl验证&#xff0c;并重新运…

使用 Docker 部署超级马里奥 Web 游戏

一、游戏介绍 超级马里奥 是一款经典闯关游戏&#xff0c;也叫做超级玛丽。由红白机 FC 游戏移植而来&#xff0c;简约的游戏画面&#xff0c;加上简单的操作方式&#xff0c;让你重温儿时的经典。 二、环境检查 1&#xff09;检查操作系统版本 检查本次实践的操作系统版本 ca…

使用VScode远程连接Ubuntu

君衍. 一、环境准备二、配置VScode三、远程连接Ubuntu 平常远程连接服务器的工具有很多&#xff0c;比如Moba、Xshell、putty、甚至CRT都可以进行远程连接服务器&#xff0c;但是他们的本质是相同的&#xff0c;都是使用ssh来进行远程连接。 这里我们之所以要使用VScode远程连接…

Debezium发布历史100

原文地址&#xff1a; https://debezium.io/blog/2020/12/17/debezium-1-4-cr1-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 1.4.0.CR1 发布 2020 年 12 月 17 日 作者&#xff1a; 克里斯…

SpringCloud Gateway(4.1.0) 返回503:原因分析与解决方案

文章目录 一、环境版本二、原因分析三、解决方案 一、环境版本 Versionspring-cloud-dependencies2023.0.0spring-cloud-starter-gateway4.1.0Nacosv2.3.0 二、原因分析 在 Spring Cloud Gateway 的早期版本中&#xff0c;Ribbon 被用作默认的负载均衡器。随着Spring Cloud的…

如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图二

Mermaid 系列 如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图一 1. 如何使用 Mermaid 生成图表 Mermaid 是一个基于 JavaScript 的工具&#xff0c;可将 Markdown 样式的文本转换为动态图表&#xff0c;让您可以毫不费力地创建和修改它们。 Mermaid 使使用简单的文…

爬虫学习笔记-scrapy安装及第一个项目创建问题及解决措施

1.安装scrapy pycharm终端运行 pip install scrapy -i https://pypi.douban.com/simple 2.终端运行scrapy startproject scrapy_baidu,创建项目 问题1:lxml版本低导致无法找到 解决措施:更新或者重新安装lxml 3.项目创建成功 4.终端cd到项目的spiders文件夹下,cd scra…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言修改鼠标光标和中心提示图鼠标光标素材修改默认鼠标光标修改中心提示图 拾取提示弹窗简单绘制UI拾取弹窗功能 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使…

关于JVM常见的十道面试题

方法区、永久代和元空间有什么区别&#xff1f; 方法区、永久区和元空间是Java虚拟机用于存储类信息的区域&#xff0c;它们在不同的Java虚拟机版本有所不同&#xff1a; 方法区&#xff1a;方法去是一块用于存储类的结构信息、常量、静态变量、即时编译器编译后的代码等数据…

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母&#xff0c;数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头&#xff0c;并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

近年来&#xff0c;推荐场域为提升模型的表达能力和计算能力&#xff0c;模型规模和计算复杂度大幅增加&#xff0c;同时&#xff0c;高规格硬件资源为模型迭代、算法优化带来了更大的机遇和挑战。为了应对模型规模和算力升级带来的存储、IO和计算挑战&#xff0c;京东零售广告…

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

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

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想&#xff0c;两个指针指向的元素之间形成一个窗口。 分类&#xff1a;窗口有两类&#xff0c;一种是固定大小类的窗口&#xff0c;一类是大小动态变化的窗口。 简而言之&#xff0c;滑动窗口算法在一个特定大小的字符串或数组上进行操作&…

git clone常见问题一览及解决方法

在使用Ubuntu下&#xff0c;终端运行git clone命令时会遇见许多问题&#xff0c;本文主要针对一些常见的问题进行整理。关于换源问题&#xff0c;推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述&#xff0c;ubuntu下个人使用发现体验良好&am…

Websocket基本用法

1.Websocket介绍 WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 应用场景&#xff1a; 视频弹幕网页聊天体育实况更新股票基金…

BUUCTF-Real-[PHP]XXE

目录 1、原理 2、XXE漏洞产生的原因 3、开始复现 paylaod 复现 4、flag 1、原理 XML数据在传输过程中&#xff0c;攻击者强制XML解析器去访问攻击者指定的资源内容&#xff08;本地/远程&#xff09;&#xff0c;外部实体声明关键字SYSTEM会令XML解析器读取数据&#xf…

八斗学习笔记

1 初始环境安装 Anaconda安装(一款可以同时创建跟管理多个python环境的软件) https://blog.csdn.net/run_success/article/details/134656460 Anaconda创建一个新python环境(安装人工智能常用的第三方python包&#xff0c;如&#xff1a;tensorflow、keras、pytorch) https://…

机器学习4-多元线性回归

多元线性回归(Multiple Linear Regression)是线性回归的一种扩展形式&#xff0c;用于建立因变量与多个自变量之间的关系。在简单线性回归中&#xff0c;我们考虑一个因变量和一个自变量之间的线性关系&#xff0c;而多元线性回归允许我们考虑多个自变量对因变量的影响。 一般…