当前位置:网站首页>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
} } }
边栏推荐
- a-upload上传图片
- 阿里内网疯传的P8“顶级”分布式架构手册被我拿到了
- 神经网络可视化有3D版本了,美到沦陷!(已开源)
- Neural network visualization has 3 d version of the, the United States to fall!(open source)
- a sequence of consecutive positive numbers with sum s
- chrome无痕浏览模式中使用插件
- 发布静态资源
- [Ext JS]11.14 SimXhr.js?_dc=1659315492151:65 Uncaught TypeError问题分析与解决
- 1.TCP/IP基础知识
- Word小技巧之图表实现自动编号和更新
猜你喜欢
随机推荐
【Daily Question】640. Solving Equations
What areas of the deep neural network are related to the human brain neural network?
How long does it take to train a neural network, neural network training takes too long
Use Function Compute to package and download OSS files [Encounter Pit Collection]
servlet——servlet介绍 | 发布动态资源
云原生 · 镜像详解
SDS Observatory
和为s的连续正数序列
论文笔记:《Time Series Generative Adversrial Networks》(TimeGAN,时间序列GAN)
【Study Notes】Unused graph theory knowledge
Cholesterol-PEG-FITC, Fluorescein-PEG-CLS, Cholesterol-PEG-Fluorescein water-soluble
&gt; 家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、backgro
大疆2022秋招笔试 —— 最小时间差、数组的最小偏移量
2. 类与对象——封装
沃土云创计划重磅来袭
ASP.NET Core 6框架揭秘实例演示[32]:错误页面的集中呈现方式
那些不用写代码也能做游戏的工具
mySQL事务及其特性分析
【翻译】Drafting and Revision: Laplacian Pyramid Network for Fast High-Quality Artistic Style Transfer
a-upload上传图片