当前位置:网站首页>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
} } }边栏推荐
猜你喜欢

4. 继承

Qihua stores the future and interprets the origin of distributed

LeetCode 剑指 Offer 35. 复杂链表的复制

分析 Flink 任务如何超过 YARN 容器内存限制

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

Cholesterol-PEG-FITC,Fluorescein-PEG-CLS,胆固醇-聚乙二醇-荧光素水溶性

如何在游戏中实现一场下雨效果

小目标绝技 | 用最简单的方式完成Yolov5的小目标检测升级!

LeetCode · Question of the Day · 1417. Reformatting String · Simulation

1.TCP/IP基础知识
随机推荐
那些不用写代码也能做游戏的工具
a-upload上传图片
巧用自定义函数,文本控件秒变高速缓存
The ceiling-level microservice boss summed up this 451-page note to tell you that microservices should be learned this way
1.TCP/IP基础知识
虚拟机使用 WinSCP & Putty
1.MySQL ----数据库的基础操作
Word小技巧之图表实现自动编号和更新
「开源推荐」一个通用的后台管理系统
PerfView专题 (第一篇):如何寻找热点函数
SDUT数据库 SQL语句练习(MySQL)
form-making notes on climbing pits (jeecg project replaces form designer)
chrome无痕浏览模式中使用插件
Incredible, thanks to this Android interview question, I have won offers from many Internet companies
MySQL表sql语句增删查改_查询
mySQL事务及其特性分析
Use Function Compute to package and download OSS files [Encounter Pit Collection]
如何解决 “主节点故障恢复的自动化” 问题?
使用.NET简单实现一个Redis的高性能克隆版(七-完结)
ID3v2 Library以便能够设置