当前位置:网站首页>scala 高级
scala 高级
2022-08-11 10:53:00 【S_ng】
1、模式匹配 概念介绍
o 类比于 java 中的 switch...case,但比其要强大、灵活很多。 o 旨在解决符合一定模式(值也是模式的一种)情况下的匹配与处
理问题。
使用说明
o 一个模式匹配包含了一系列备选项,每个都开始于关键字 case。
每个备选项都包含了一个模式及一到多个表达式。箭头符号=>隔
开了模式和表达式。
o 选择器 match {备选项},match 表达式通过以代码编写的先后次
序尝试每个模式来完成计算,只要发现有一个匹配的 case,剩下
的 case 不会继续匹配。
应用示例
o 经典示例(同类型)
def main(args: Array[String]) {
println(selfMatch("javase"))
}
def selfMatch(x: String): String = x match {
case "javase" => "Java 开发标准版"
case "javaee" => "Java 开发企业版"
case _ => "其它 Java 版本 " }def main(args: Array[String]) {
println(selfMatch("one"))
println(selfMatch(2))
println(selfMatch("III"))
println(selfMatch("five"))
}
def selfMatch(x: Any): Any = x match {
case "one" => 1
case 2 => "two"
case "III" => "希腊数字 3"
case _ => "其它不认识了" }def main(args: Array[String]) {
println(selfMatch(1))
println(selfMatch(10))
println(selfMatch(22))
println(selfMatch(78))
}
def selfMatch(x: Int): String = x match {
case _ if x<12 => "幼年"
case _ if x<18 => "未成年"
case _ if x>=18 && x<60 => "成年"
case _ => "已步入老年了!"
}object TestPatternMatch {
def main(args: Array[String]) {
println(selfMatch(1))
println(selfMatch("10"))
println(selfMatch(new TestPatternMatch()))
println(selfMatch(new Object()))
}
def selfMatch(x: Any): Any = x match {
case _:Int => "传入的是整型"
case _:String => "传入的是字符串"
case _:TestPatternMatch => "传入的数据类型是
TestPatternMatch"
case _ => "不知道什么类型" } }
//定义一个空类,便于上边的类型模式匹配
class TestPatternMatch{
}def main(args: Array[String]) {
throw new Exception("测试异常抛出!");
}object TestException {
def main(args: Array[String]) {
callMe()
}@throws(classOf[Exception])
def callMe() = {
println("i am in callMe method") } }捕获异常
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt") } catch {
case ex: FileNotFoundException => {
println("不好意思,文件没有找到!") }
case ex: IOException => {
println("不明原因的 IO 异常!") } } }def main(args: Array[String]) {
try {
val f = new FileReader("input.txt") } catch {
case ex: FileNotFoundException => {
println("不好意思,文件没有找到!") }
case ex: IOException => {
println("不明原因的 IO 异常!") } } finally {
println("无论 try...catch 如何,都会执行 finally,我在
finally 中!") } }def main(args: Array[String]) {
var obj = apply("tianliang", "192.168.1.33");
println("Apply 方法形成一个对象: " + obj);
println("Unapply 方法反向提取该对象中的参数:" +
unapply(obj));
println("Unapply 方法反向提取该对象中的参数: " +
unapply("我不是一个登陆地址"));
}
// 注入方法 (可选)
def apply(username: String, ip: String) = {
username + "@" + ip
}
// 提取方法(必选)
def unapply(str: String): Option[(String, String)] =
{
val parts = str split "@"
if (parts.length == 2) {
Some(parts(0), parts(1))
} else {
None
} }object TestUnapplyPatternMatch {
def main(args: Array[String]) {
//自动调用 TestUnapplyPatternMatch 的 apply 方法
val loginInfo = TestUnapplyPatternMatch("tianliang", "192.168.1.33")
println(loginInfo)
loginInfo match {
//unapply 被自动调用
case TestUnapplyPatternMatch(username, ip) => println(username + "
登陆了" + ip + " 这台机器!")
case _ => println(loginInfo) } }
def apply(username: String, ip: String) = username + "@" + ip
def unapply(loginInfo: String): Option[(String, String)] = {
val parts = loginInfo split "@"
if (parts.length == 2) {
Some(parts(0), parts(1))
} else {
None
} } }边栏推荐
猜你喜欢

How to improve the efficiency of telecommuting during the current epidemic, sharing telecommuting tools

计算数组某个元素的和
![[Central Task Scheduling System - Communication Development]](/img/c6/304ee4870e79376d8f5604f9d45849.png)
[Central Task Scheduling System - Communication Development]

a sequence of consecutive positive numbers with sum s

安装nodejs

齐话存储未来,诠释分布式缘起

chrome is set to dark mode (including the entire webpage)

Ali Ermian: Do you know how to tune the JVM?
![C# Call AutoNavi Map API to obtain latitude, longitude and positioning [Detailed 4D explanation with complete code]](/img/39/75a32a787c4e85026a768fd5781f25.png)
C# Call AutoNavi Map API to obtain latitude, longitude and positioning [Detailed 4D explanation with complete code]

阿里内网疯传的P8“顶级”分布式架构手册被我拿到了
随机推荐
独家采访 | 智能源于自发产生而非计划:进化论拥趸,前OpenAI研究经理、UBC大学副教授Jeff Clune
MySQL数据库基础_常用数据类型_表设计
mySQL transaction and its characteristic analysis
当科学家决定搞点“花里胡哨”的东西
Six functions of enterprise exhibition hall production
爆料!前华为微服务专家纯手打500页落地架构实战笔记,已开源
智能恒等于推荐系统
Calculate the sum of an element of an array
5. 内部类
小目标绝技 | 用最简单的方式完成Yolov5的小目标检测升级!
LeetCode 剑指 Offer 35. 复杂链表的复制
数据库内核面试中我不会的问题(4)
php获取微信小程序码并存储到oss
Word小技巧之图表实现自动编号和更新
servlet——servlet介绍 | 发布动态资源
ID3v2 Library以便能够设置
7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇
MySQL表sql语句增删查改_增加
SDUT数据库 SQL语句练习(MySQL)
chrome is set to dark mode (including the entire webpage)