样例类应用实例和中置表达式 | 学习笔记

简介: 快速学习样例类应用实例和中置表达式

开发者学堂课程【Scala 核心编程 - 进阶样例类应用实例和中置表达式学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9081


样例类实例应用和中置表达式


内容介绍:

一、样例类的实践例子

二、中置表达式


一、样例类的实践例子

体验样例类方式进行对象匹配

1.代码介绍

当我们有一个类型为 Amount 的对象时,可以用模式匹配他的类型,并将属性值绑定到变量,(即:把样例类对象的属性值提取到某个变量上,该功能有用)

样例类最佳实践1:

当有一个类型为 Amount 的对象时,可以用模式匹配来匹配他的类型,并将属性值绑定到变量(即:把样例类对象的属性值提取到某个变量,该功能有用)for (amt <- Array(Dollar(1000.0), Currency(1000.0, "RMB"), NoAmount)) (

val result = amt match [

I/说明

case Dollar(v) => "S" + v

1/说明

case Currency(v u) =>v+"u

case NoAmount

printin(amt " + result)

【案例演示+代码说明】

for(amt<.Array(Dollar(1000.0).Currency(1000.0,RMB),NoAmount)){

Val result = amt match{

//说明

Case Dollar(v) =>$+ v

//说明

case Currency(v,u)=>v+””+u

Case NoAmount =>””

}

Printin(amt +””+result)

{

该命令的第一条语句为 for 循环语句,对数组进行循环,数组里面有 dollar,currency 和 NoAmount 的对象实例,用match匹配,匹配dollar。对象匹配触发dollar 的 unapply 方法。这个方法已经自带了,不需要自己输入,会严格按照设置的机制返回。

运行结果

当从数组里面取出dollar2的实例时,程序会按照match匹配机制依次去匹配。

匹配到样例类时,会把对象传入到unapply里面,并将对象返回v。此案例的作用就是体验使用样例类方式进行对象匹配的优越性和简介性。

下图为运行结果:

D:\program\jdk8\bin\Java

Dolar2(1000.0):  $1000.0

Currency2(1000.0,RMB):$1000.0. RMB

NoAmount2:

Process finished with exit code 0

2.Copy 操作

样例类中有一个 copy 方法,可以带有名参数,copy 可以创建一个新对象,类似于Java 里面的克隆,去完成对一个类型参数的拷贝。

5    val amt = new currency3(3000.0,RMB)

对于上述语句,快速创建一个与amt相同属性值的变量,此时可以用到copy语句。如图:

对于此类例子的实践应用如下:

package com.atguigu.chapter12.casepak

object CaseClassDemoe3 {

defmain(args: Array(String)):unit

val ant e new Currency3(3000,O."AMB"

val ant2 ant.copy() 克隆、创建的对象和amt的属性一样

printin("ant2.value' ant2:value amt2.umitz ant2.unit)

)

)

abstractclass Atount)

Case    class   Dollar(valuei Double extends anounti //样例类

Case classCurreecy(values:Double,unit:string) extends Amount3//样例类

ease coject NoAnount) extends Amount3

运行结果如下:

D:\program\jdk8\bin\java·r

D:\program\jdk8\bin\java"-javaagent:D:\program\ideamynew\Intelli] IDEA 2017.2.5\lib\idea_rt.jar=50838:D:\program\ideamynew\In

Process finished with exit code o

当在进行对象克隆时,需要改变某个值,例如改变上图中3000这个数值,其余不变。

则指定这个参数名,在拷贝时,通过改变属性值来改变。

package com.atguigu.chapter12.casepak

object CaseClassDemo03 {

def main(args: Array[String]): Unit=(

val amt= new Currency3(3000.0,"RMB")

Val amt2 = amt.copy() 克隆,创建的对象和amt的属性一样println("amt2.value"+ amt2.value +"amt2.unit="+ amt2.unit)println(amt2)

valamt3 = amt.copy(value = 8000.0)

println(amt3)

)

}

abstract class Amount3

case class Dollar3(value: Double) extends Amount3 //样例类caseclass Currency3(value: Double, unit: string) extends Amount3//样例类

case object NoAmount3 extends Amount3 //样例类


二、中置表达式

1.什么是中置表达式?

1+2,这就是一个中置表达式,如果 unapply 方法产出一个元祖,可以在 case 语句中使用中置表达,比如可以匹配一个 List 序列。

2.应用实例

List(1,3,5,9)match(//修改并测试

//1.俩个元素间::叫中置表达式,至少first,second俩个匹配才行

//2.first匹配第一个second匹配第二个,rest匹配剩余部分(5,9)

case first ::second::rest=> printin(first + second + rest length)

Case_=>printin(匹配不到....”)

首先是一个list的集合,现在用中置表达式match来匹配,按照这个程序进行下去,最后返回时得到一个元组。

运行结果如下:

package com.atguigu.chapter12

object MidCase (

def main(args: Array[String]):Unit =

List(1,3,5,9) match  

//修改并测试

//1.两个元素间:叫中置表达式,至少first,second两个匹配才行.

//2.first 匹配第一个 second匹配第二个,rest 匹配剩余部分(5,9)case first ::second ::rest => println(first + second + rest.length)//

case _=> println(”匹配不到...”)

)

)

}

D:\program\jdk8\bin\java

13 2

Processfinished with exit code0

相关文章
|
iOS开发 MacOS Windows
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
|
存储 缓存 监控
缓存击穿、缓存穿透、缓存雪崩 3大问题,如何彻底解决?
【10月更文挑战第8天】在分布式系统中,缓存的使用极大地提高了系统的性能和响应速度。然而,缓存击穿、缓存穿透和缓存雪崩是三个常见的缓存相关问题,它们可能导致系统性能下降,甚至引发系统崩溃。本文将深入探讨这三个问题的成因、影响以及彻底的解决方案。
1745 1
|
Ubuntu Shell
【Ubuntu系统】三步更新自己的Cmake最新版本
Ubuntu系统中通过三步简单流程更新Cmake到最新版本的具体操作方法,包括卸载旧版本、下载并运行安装脚本以及创建软链接。
3704 1
|
机器学习/深度学习 人工智能 自然语言处理
炸裂全场!百度如流超级助理、Comate X两大黑科技全面开挂,工作生产力狂飙
用户只需要准确描述需求,在执行任务的过程中不需要或者仅需人类简单的确认操作,至于如何理解需求、如何整合系统、如何生成答复,都由AI自动去完成,很多冗长的过程被大模型的能力给“折叠”了。
252 0
|
存储 监控 安全
云计算:优势与挑战
云计算作为一种先进的技术,正越来越被企业所青睐。但是,随之而来的是其所面临的各种挑战。本文将分析云计算的优势和劣势,并讨论如何应对这些挑战。
|
应用服务中间件 nginx
内网穿透ngrok
ngrok实现内网穿透操作流程
|
搜索推荐 前端开发 程序员
低代码开发的优势与劣势,看这一篇就够了
低代码开发的优势与劣势,看这一篇就够了
614 0
|
移动开发 Python HTML5
Python办公自动化【发送普通邮件、发送HTML邮件、发送附件邮件-smtplib、批量发送邮件-smtplib、发送邮件-zmail】(八)-全面详解(学习总结---从入门到深化)
Python办公自动化【发送普通邮件、发送HTML邮件、发送附件邮件-smtplib、批量发送邮件-smtplib、发送邮件-zmail】(八)-全面详解(学习总结---从入门到深化)
411 0
Error:svn:E155037:Previous operation has not finished; run ‘cleanup‘ if it was interrupted(完美解决)
Error:svn:E155037:Previous operation has not finished; run ‘cleanup‘ if it was interrupted(完美解决)
613 0
Error:svn:E155037:Previous operation has not finished; run ‘cleanup‘ if it was interrupted(完美解决)