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

概述

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

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

相关链接

阅读之前,可以浏览一下

scala相关文章

辅助构造器

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

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

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

val DefaultCrustSize = 12
val DefaultCrustType = "THIN"// the primary constructor
class Pizza (var crustSize: Int, var crustType: String) {// one-arg auxiliary constructordef this(crustSize: Int) = {this(crustSize, DefaultCrustType)}// one-arg auxiliary constructordef this(crustType: String) = {this(DefaultCrustSize, crustType)}// zero-arg auxiliary constructordef 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 crustscala> val p2 = new Pizza(DefaultCrustSize)
p2: Pizza = A 12 inch pizza with a THIN crustscala> 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: 3000scala> 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 Socketscala> new Socket(linger=2000)
res0: Socket = timeout: 2000, linger: 2000

结束

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

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

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

相关文章

冯诺依曼体系结构、进程、环境变量

冯诺依曼体系结构、进程、环境变量 一、冯诺依曼体系结构1、结构图2、示例3、CPU与数据 二、进程1、概念2、查看进程(1)通过/proc系统文件夹(2)通过top和ps用户级工具(3)通过系统调用 3、通过系统调用创建进…

会声会影2024这款视频剪辑软件怎么样?

众所周知,每每有新兴行业逐渐崛起壮大的时候,随机而来的就是这个行业创造出的衍生行业,比如说现在的短视频平台或者是视频剪辑行业,都是很明显的例子,今天我们就针对剪辑软件来和大家聊一聊,会声会影2024这…

论坛搭建.

目录 一.配置软件仓库 二.安装http php miriadb 三.配置数据库 一.配置软件仓库 1.进入仓库目录 cd /etc/yum.repos.d 2.创建仓库文件 vim local.repo 3.在 local.repo中写入:(粘贴的时候注意位置) [biaoshi] 仓库标识符 namemiaoshu …

禁用Google Chrome自动升级、查看Chrome版本号

问题 查看Chrome版本时,会自动升级,这个设计很垃圾,对开发者不友好;查看Chrome版本方法:chrome浏览器右上角—>自定义及控制Google Chrome(三个竖着的点号)------>帮助---->关于Google Chrome。 解决办法 禁用自动升级…

[Unity][VR]透视开发系列3-Passthrough应用的真机测试方法

【视频讲解】 视频讲解地址请关注我的B站。 专栏后期会有一些不公开的高阶实战内容或是更细节的指导内容。 B站地址: https://www.bilibili.com/video/BV1Zg4y1w7fZ/ 我还有一些免费和收费课程在网易云课堂(大徐VR课堂): https://study.163.com/provider/480000002282025/…

Open3D(C++) 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 平面方程的一般表达式为: A x + B y + C

14个最实用的WordPress SEO插件推荐

在这篇文章中,将为你推荐最有利于网站SEO的WordPress插件,这里介绍这些插件的主要功能及使用技巧,合理使用它们将有助于网站SEO排名。无论你是一个刚刚开始的博客作者,还是一个经验丰富的企业网站管理员,我们都将帮助你…

洛谷P1765 手机 / 秋季赛 九宫格

手机 题目描述 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下。例如要按出 x \tt x x 就得按 9 9 9 两下,第一下会出 w \tt w w,而第二下会把 w \tt w w 变成 x \tt x x。 0 0 0 键按一下会出一个空格。 你的任务是…

React 你还在用 Redux 吗?更简化的状态管理工具(Recoil)

以往传统的 Redux 状态管理工具使用起来代码太过于复杂。 你需要通过纯函数触发 action 再去修改 data 中定义的数据,而且要通过接口请求数据还需要借助 redux - think 这个中间件才能完成。。。 更加方便使用的工具:Recoil ~ 由 facebook 推出契合 R…

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

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

RabbitMQ学习05

文章目录 交换机1.Exchanges1.1 概念1.2 类型1.3 无名exchange 2. 临时队列3. 绑定(bings)4. Fanout4.1 介绍 5.Direct exchange5.1 介绍5.2 多重绑定5.3 实战: 6. Topics6.1 规则6.2 实战 交换机 1.Exchanges 1.1 概念 RabbitMQ 消息传递模型的核心思…

【Tomcat】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…

数字孪生智慧工厂三维可视化系统解决方案,打造新一代智慧工厂

在制造业的快速发展和数字化转型的时代,智慧工厂已经成为制造企业前进的必经之路。数字孪生技术,作为工业数字化转型的核心动力,为打造智慧工厂提供了关键支持。其中,数字孪生智慧工厂三维可视化系统解决方案无疑是制造企业的得力…

基于vue小红书平台用户数据分析与可视化

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Harbor私有镜像仓库搭建

本文基于:https://zhuanlan.zhihu.com/p/143779176 1.环境准备 IP:192.168.10.136/24 操作系统:centos7 2.安装Docker、Docker-compose 2.1安装Docker-CE $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.re…

视频转换器WinX HD Video Converter mac中文特点介绍

WinX HD Video Converter mac是一款功能强大的视频转换器,它可以将各种不同格式的视频文件转换为其他视频格式,以便用户在各种设备上进行播放。WinX HD Video Converter是一个功能强大、易于使用的视频转换器,适用于各种类型的用户&#xff0…

C语言每日一练(二)

单链表经典算法专题 一、 单链表相关经典算法OJ题1:移除链表元素 解法一:在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…

[架构之路-245/创业之路-76]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业资源管理计划ERP

目录 前言: 一、企业信息化的结果:常见企业信息化软件 1.1 企业资源管理计划 1.1.1 什么是ERP:企业最常用的信息管理系统 1.1.2 ERP的演进过程 1.1.3 EPR模块 1.1.4 EPR五个层级 1.1.5 企业EPR业务总体流程图 1.1.6 什么类型的企业需…

6G关键新兴技术- 智能超表面(RIS)技术演进

摘要: 根据欧盟5G公私联盟协会定义,可重构智慧表面技术是由能够任意塑造电磁波面的材料组成,几乎是被动设备,可以适应或改变发射器和接收器之间的无线电信号。 一、产品定义及范围 根据欧盟5G公私联盟协会(5G Infrastructure P…

【网络协议】聊聊TCP如何做到可靠传输的

网络是不可靠的,所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的,那么就是采用一发一收的方式,但是这样其实效率并不高,所以通常采用的是累计确认或者累计应答。 如何实现一个靠谱的协议&…