好程序员大数据教程分享Scala系列之模式匹配和样例类

  

好程序员大数据教程分享Scala系列之模式匹配和样例类
1。样例类
在Scala中样例类是一中特殊的类,样例类是不可变的,
可以通过值进行比较,可用于模式匹配。
定义一个样例类:
1。构造器中每一个参数都是val,除非显示地声明为var
2。伴生对象提供申请,让你不使用新关键字就能构造出相应的对象
案例类点(x: Int y: Int)
创建样例类对象:
val点=点(1,2)
val anotherPoint=点(1,2)
val yetAnotherPoint=点(2,2)
//访问对象值
point.x
。x=1//不可以
通过值对样例类对象进行比较:
如果(点==anotherPoint) {
println(点+“;和“;+ anotherPoint +“;是相同的!”)其他
} {
println(点+“;和“;+ anotherPoint +“;是不同的!”)
}
//点(1,2)和点(1,2)一样的。

  

如果(点==yetAnotherPoint) {
println(点+“;和“;+ yetAnotherPoint +“;是相同的!”)其他
} {
println(点+“;和“;+ yetAnotherPoint +“;是不同的!”)
}
//点(1,2)和点(2,2)是不同的。
样例类的拷贝
您可以创建一个(浅)本案例类的一个实例通过使用复制方法。你可以选择改变构造函数的参数。
用例类信息(发送者:字符串,收件人:字符串,身体:字符串)
val message4=消息(“julien@bretagne.fr",“travis@washington.us",“我佐薇komz阿甘特图马amezeg")
val message5=message4。(发送方=message4副本。收件人,收件人=癱laire@bourgogne.fr")
message5.sender//travis@washington.us
message5。收件人//claire@bourgogne.fr
message5.body//拔易艮眐omz阿甘特图马amezeg"
在模式匹配中使用样例类:
抽象类金额
//继承了普通类的两个样例类
用例类美元(价值:双)扩展了
用例类货币(价值:双单元:字符串)延伸量
用例对象没有延伸量
对象CaseClassDemo {

  

def主要(args:数组[String]):单位={
val amt=新的美元(10);
patternMatch (amt)
}
def patternMatch (amt:数量){
amt匹配{
美元(v)=比;println (“$”;+ v)
货币(_ u)=比;println(“哦,不,我有“+ u)
空=比;println (“nothing")//样例对象没有()
}
}
}
声明样例类,以下几件事会自动发生:
1。提供取消应用方法,让模式匹配可以工作
2。生成toString=hashCode复制方法,除非显示给出这些方法的定义。
2。模式匹配
1。更好的开关
Scala中类似Java的开关代码:
注意:
Scala的模式匹配只会匹配到一个分支,不需要使用打破语句,因为它不会掉入到下一个分支。比赛是表达式,与如果表达式一样,是有值的:
对象PatternDemo {

  

def主要(args:数组[String]):单位={
var=0
val ch: Char=皃”
val valchar=皃”
var数字=0

  

//匹配是表达式
ch匹配{
' + '=比;标志=1
', '=比;标志=1
//使用|分割多个选项
中“*”|“x”=比;符号=2
//可以使用变量
//如果情况关键字后面跟着一个变量名,那么匹配的表达式会被赋值给那个变量。
案例valchar=比;符号=3
//案例类似Java中默认的
//如果没有模式能匹配,会抛出MacthError
//可以给模式添加守卫
如果Character.isDigit (ch)=比;数字=字符。数字(ch, 10)
}
println(“标志=?标志)
}

  

}
1常量模式(常数模式)包含常量变量和常量字面量
scala>val网站=癮libaba.com"
scala>站点匹配{案例“alibaba.com"=比;println (“ok")}
scala>val阿里巴巴=癮libaba.com"
//注意这里常量必须以大写字母开头
scala>def foo (s:字符串){{年代匹配情况下阿里巴巴=比;println (“ok")}}
常量模式和普通的,如果比较两个对象是否相等(=)没有区别,并没有感觉到什么威力
2变量模式(变量模式)
确切的说单纯的变量模式没有匹配判断的过程,只是把传入的对象给起了一个新的变量名。
scala>站点匹配{whateverName=比;println (whateverName)}
上面把要匹配的网站对象用whateverName变量名代替,所以它总会匹配成功,不过这里有个约定,对于变量,要求必须是以小写字母开头,否则会把它对待成一个常量变量,比如上面的whateverName如果写成whateverName就会去找这个whateverName的变量,如果找到则比较相等性,找不到则出错。
变量模式通常不会单独使用,而是在多种模式组合时使用,比如
列表(1,2)匹配{案例列表(x, 2)=比;println (x)}
里面的x就是对匹配到的第一个元素用变量x标记。
3通配符模式(通配符模式)
通配符用下划线表示:““,可以理解成一个特殊的变量或占位符。单纯的通配符模式通常在模式匹配的最后一行出现,

好程序员大数据教程分享Scala系列之模式匹配和样例类