6.scala辅助构造器与为构造函数提供默认值(一)

news2024/12/28 4:22:17

概述

本文主要说明: 辅助构造器为构造函数提供默认值 的使用

  • 辅助构造器
  • 为构造函数提供默认值

相关链接

阅读之前,可以浏览一下

scala相关文章

辅助构造器

可以通过定义名为this的方法来定义辅助Scala类构造函数。只有几个规则需要了解:

  • 每个辅助构造函数必须具有不同的签名(不同的参数列表)
  • 每个构造函数都必须调用以前定义的构造函数之一

这里定义了一个Pizza类的例子,定义了多个构造函数

val DefaultCrustSize = 12
val DefaultCrustType = "THIN"

// the primary constructor
class Pizza (var crustSize: Int, var crustType: String) {

    // one-arg auxiliary constructor
    def this(crustSize: Int) = {
        this(crustSize, DefaultCrustType)
    }

    // one-arg auxiliary constructor
    def this(crustType: String) = {
        this(DefaultCrustSize, crustType)
    }

    // zero-arg auxiliary constructor
    def this() = {
        this(DefaultCrustSize, DefaultCrustType)
    }

    override def toString = s"A $crustSize inch pizza with a $crustType crust"
}

scala命令行中执行Pizza构造实例

scala> val p1 = new Pizza(DefaultCrustSize, DefaultCrustType)
p1: Pizza = A 12 inch pizza with a THIN crust

scala> val p2 = new Pizza(DefaultCrustSize)
p2: Pizza = A 12 inch pizza with a THIN crust

scala> val p4 = new Pizza
p4: Pizza = A 12 inch pizza with a THIN crust

为构造函数提供默认值

scala允许我们为构造函数提供默认值,一般提供最常出现的值,可以少传参数

class Socket(var timeout: Int = 2000, var linger: Int = 3000) {
    override def toString = s"timeout: $timeout, linger: $linger"
}

通过为参数提供默认值,现在可以通过多种不同的方式创建新的Socket

new Socket()
new Socket(1000)
new Socket(4000, 6000)

scala命令行中执行

scala> new Socket()
res0: Socket = timeout: 2000, linger: 3000

scala> new Socket(1000)
res1: Socket = timeout: 1000, linger: 3000

好处

为构造函数提供默认值有两个好处:

  • 可以省写参数值,以默认值为首选
  • 根据自己所需,覆盖默认值

命名参数

Scala的另一个好处是,在创建类的新实例时可以使用命名参数。例如,下面此类:

class Socket(var timeout: Int, var linger: Int) {
    override def toString = s"timeout: $timeout, linger: $linger"
}
// 可以这样给构造赋值
val s = new Socket(timeout=2000, linger=3000)

在这里插入图片描述
命名参数与函数默认值相结合,更加灵活,可以为只需要改变的参数赋值,而不用给不需要改变的参数重新赋值,针对参数比较多的时候,很友好

// 可以这样给构造赋值
scala> class Socket(var timeout: Int, var linger: Int) {
     |     override def toString = s"timeout: $timeout, linger: $linger"
     | }
defined class Socket
scala> val s = new Socket(linger=3000, timeout=2000)
s: Socket = timeout: 2000, linger: 3000

命名参数与函数默认值相结合

scala> class Socket(var timeout: Int = 2000, var linger: Int = 3000) {
     |     override def toString = s"timeout: $timeout, linger: $linger"
     | }
defined class Socket

scala> new Socket(linger=2000)
res0: Socket = timeout: 2000, linger: 2000

结束

构造函数上部分就说明完了,下一篇接着说明构造函数

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

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

相关文章

算法笔记【7】-直接插入排序算法

文章目录 一、简介二、基本原理和实现步骤三、优缺点分析 一、简介 在排序算法中,直接插入排序是一种基本而常用的排序方法。它通过不断将待排序数组中的元素插入到已排序部分的合适位置,逐步构建有序数组。本文将详细介绍直接插入排序算法的原理、实现…

2024王道考研计算机组成原理——总线

6.1 总线概述 每一个外设都通过IO接口和DB、CB、AB相连 三系统总线结构: 桥有总线仲裁的功能,就是把某一总线的使用权分给哪个设备? 6.1.2 总线的性能指标 总线复用:分时传输地址&数据 6.2 总线仲裁 通过控制总线来发送使…

《RT-DETR改进实战》专栏介绍 专栏目录

《RT-DETR改进实战专栏》介绍及目录 介绍:欢迎来到最新专栏《RT-DETR改进实战》!这个专栏专注于基于 YOLOv8 项目的魔改版本,而不是百度飞桨框架中的 RT-DETR。 本专栏为想通过改进 RT-DETR 算法发表论文的同学设计。每篇文章均包含完整的改…

使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

Golang,也被称为Go,已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时,Golang提供了一系列强大的库,简化了数据库交互并提高了效率。在本文中,我们将深入探讨一些最流行的Golang MySQL数据库库&#xff…

ImportError: DLL load failed while importing _pyopenvino: 找不到指定的程序

ImportError: DLL load failed while importing _pyopenvino: 找不到指定的程序 完全按照官方的pip安装方式,但是报错 解决方法: 下载下面压缩包 官网下载链接 解压到 运行程序之前 完成!!! 测试 python -c &quo…

思维模型 纳什均衡

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。纳什均衡解释了囚徒困境、智猪博弈、内卷、美苏的军备竞赛等博弈问题。 1 纳什均衡的应用 1.1 经典的 囚徒困境 1 背景 囚徒困境是一个经典的博弈论问题,主要描述了两个被捕的…

第十三章 枚举与泛型

13.1枚举类型 13.1.1 使用枚举类型设置常 设置常量时,通常将常量放置在接口中,这样在程序中直接使用。该常量不能被修改,因为在接口定义常量时,该常量的修饰符为final与static。常规定义常量的代码如下: public int…

Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作

文章目录 Stable Diffusion安装AnimateDiff插件适配sdxl模型适配 Stable Diffusion使用插件安装界面设置基础文生图加入lora的文生图 Stable Diffusion安装 我的情况比较特殊,显卡版本太老,最高也就支持cuda10.2,因此只能安装pytorch1.12.1&…

05、SpringCloud -- 秒杀按钮、秒杀请求流程(各种请求到后台的判断、减库存、下单数据和次数保存)

目录 秒杀按钮代码实现:vue的JS实现:秒杀请求需求:代码前端后端Seckill-apidomainSeckill-serverWebConfig1、秒杀请求判断controller2、重复下单判断MapperService 接口Impl 实现类controller3、库存判断4、秒杀涉及到的操作_01、减库存_02、创建订单对象并保存_03、用户下…

mycat2.X读写分离

一、数据库中间件介绍 二、下载安装包 2.1下载地址: 下载两个一个是mycat程序,一个是mycat的驱动 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies-2…

电子邮件钓鱼攻击的防范:如何识别并避免网络诈骗

在数字化的今天,电子邮件成为我们日常工作和生活中不可或缺的通讯工具。然而,电子邮件钓鱼攻击也随之成为网络诈骗的常见手法。通过识别和避免电子邮件钓鱼攻击,我们可以在很大程度上保护自己的网络安全。本文将为您提供一些实用的识别和防范…

nacos在linux中的安装、集群的配置、mysql生产配置

1.下载和安装 官方下载地址:https://github.com/alibaba/nacos/releases,根据自己需要的本版去下载就行 下载的是 .tar.gz 后缀的文件是linux版本的 使用tar命令解压,完成之后是一个nacos的文件夹 和windows下的文件夹目录是一样的 要启…

小黑子—spring:第三章 AOP开发

spring入门3.0 三 小黑子的springAOP开发1. AOP简介1.1 AOP的概念1.2 AOP思想的实现方案1.3 模拟AOP思想实现的基础代码1.4 AOP的相关概念 2. 基于xml配置的AOP2.1 XML方式AOP快速入门2.2 XML方式AOP配置详解2.3 xml方式AOP的原理解析2.3.1 AOP底层两种生成Proxy的方式 3. 基于…

一个老旧优盘从2M变回8G的逆袭之路

前言 最近收拾资料,发现了一个比较老的优盘,上面标记8G内存,就好奇里边存了点啥。用电脑打开,啥内容都没有,结果大小还显示2M???看看今天能不能救活吧。 正文 步骤一、清空磁盘 …

并发安全问题之超卖问题

并发安全问题之超卖问题 乐观锁总结: 优点:不加锁性能好。 缺点:同时请求成功率低(即只要发现数据变了就放弃了)。 乐观锁思想的具体体现:一共两步,第一步,先查询状态。第二步&…

Java VMTranslator Part I

目录 堆栈运算命令 基本思路 核心代码 Parser Code Writer Main 实验结果,使用SimpleAdd、StackTest进行验证 内存访问命令 基本思路 核心代码 Parser Code Writer Main 实验结果,使用进行验证。对比生成的二进制代码文件。 用Java写一个翻…

MySQL6:索引使用原则,联合索引,联合主键/复合主键,覆盖索引、什么是回表?索引条件下推,索引的创建与使用,索引的创建与使用,索引失效

MySQL6:索引使用原则,联合索引,联合主键/复合主键,覆盖索引、什么是回表?索引条件下推,索引的创建与使用,索引的创建与使用,索引失效 索引使用原则列的离散(sdn)度 联合索引创建联合…

【C++初探:简单易懂的入门指南】二

【C初探:简单易懂的入门指南】二 1.引用1.1引用做函数的参数1.2 引用做返回值1.2.1 关于引用做返回值的几点补充 1.3 多引用(对一个变量取多个别名)1.4 引用类型一致性原则以及权限的问题阐述1.5引用的效率问题1.6引用和指针的比较 2.auto关键字2.1 auto关键字的使用…

BSTree二叉树讲解

二叉搜索树的概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值…

重置 VCSA 6.7 root密码和SSO密码

原贴地址:https://www.cnblogs.com/airoot/p/16059033.html 问题描述 1、用root用户登录 VMware vCenter Server Appliance虚拟机失败,无法登录 2、vCenter Server Appliance 6.7 U1的root帐户错误尝试次数超过3次已锁定或帐户已过期 官方说明 在VC…