当前位置: 首页 > news >正文

国外装修网站建设模板/各种手艺培训班

国外装修网站建设模板,各种手艺培训班,医院网站前置审批,如何做网线水晶头接法图解一)模式匹配 模式匹配,其实类似于Java中的 switch case 语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理 不过Scala没有Java中的 switch case 语法,但是,Scala提供了更加强大的…

一)模式匹配

模式匹配,其实类似于Java中的 switch case 语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理
不过Scala没有Java中的 switch case 语法,但是,Scala提供了更加强大的 match case 语法,就是这个模式匹配
Java的 switch case 仅能匹配变量的值,而Scala的 match case 可以匹配各种情况,比如:变量的类型、集合的元素,有值没值

1)对变量的值进行模式匹配

def demo1(day: Int) {
day match {
case 1 => println("Monday")
case 2 => println("Tuesday")
case 3 => println("Wednesday")
case _ => println("none")
}
}scala> demo1(1)
Monday
scala> demo1(4)
none

注意:match case中,只要一个case分支满足并处理了,就不会继续判断下一个case分支了,这
一点与Java不同,java的switch case需要用break停止向下执行

Scala的模式匹配一个强大之处就在于,可以直接匹配类型,而不是值!!!这点是java的switch case绝对做不到的
语法格式:变量 match { case 变量: 类型 => 代码 }
典型的一个应用场景就是针对异常的处理

import java.io._
def processException(e: Exception) {
e match {
case e1: IllegalArgumentException => println("IllegalArgumentException "
case e2: FileNotFoundException => println("FileNotFoundException " + e2)
case e3: IOException => println("IOException " + e3)
case _: Exception => println("Exception " )
}
}scala> processException(new Exception())
Exception

在try-catch异常中的应用

try {
val lines02 = scala.io.Source.fromFile("D://test02.txt").mkString
} catch {
case ex: FileNotFoundException => println("no file")
case ex: IOException => println("io exception")
case ex: Exception => println("exception")
}

2) case class与模式匹配
Scala中提供了一种特殊的类,用 case class 进行声明,中文可以称为样例类
case class 其实有点类似于Java中的JavaBean的概念
即只定义field,会由Scala在编译时自动提供get和set方法,但是没有其它的method
case class 的主构造函数接收的参数通常不需要使用var或val修饰,Scala自动就会使用val修饰(但是如果你自己使用var修饰,那么还是会按照var来,在这用哪个区别都不大)
Scala自动为 case class 定义了伴生对象,也就是object,并且定义了apply()方法,该方法接收主构造函数中相同的参数,并返回 case class 对象
下面来看一个案例:
先定义三个class

class Person
case class Teacher(name: String, sub: String) extends Person
case class Student(name: String, cla: String) extends Person//再创建一个函数
def check(p: Person) {
p match {
case Teacher(name, sub) => println("Teacher, name is " + name + ", sub is"+sub)
case Student(name, cla) => println("Student, name is " + name + ", cla is"+sub)
case _ => println("none")
}
}//执行
scala> check(new Student("tom","class1"))
Student, name is tom, cla is class1
scala> check(new Person())
none

3)Option与模式匹配

Scala有一种特殊的数据类型,叫做Option。
Option有两种值,一种是Some,表示有值,一种是None,表示没有值
Option通常会用于模式匹配中,用于判断某个变量是有值还是没有值,这比null来的更加简洁明了
 

val ages = Map("jack" -> 18, "tom" -> 30, "jessic" -> 27)
def getAge(name: String) {
val age = ages.get(name)
age match {
case Some(age) => println("your age is " + age)
case None => println("none")
}
}
//执行
scala> getAge("jack")
your age is 18
scala> getAge("hehe")
none

二)隐式转换

Scala的隐式转换,允许手动指定将某种类型的对象转换成其它类型的对象
Scala的隐式转换,最核心的就是定义隐式转换函数,即implicit conversion function
隐式转换函数与普通函数唯一的语法区别是要以implicit开头而且最好要定义函数返回类型
隐式转换非常强大的一个功能,就是可以在不知不觉中加强现有类型的功能。也就是说,我们可以为某个普通类定义一个加强类,并定义对应的隐式转换函数,这样我们在使用加强类里面的方法的时候,Scala会自动进行隐式转换,把普通类转换为加强类,然后再调用加强类中的方法

通常建议,仅仅在需要进行隐式转换的地方,比如某个函数内,用import导入隐式转换函数,这样可以缩小隐式转换函数的作用域,避免不需要的隐式转换

案例:狗抓老鼠

class cat(val name: String){
def catchMouse(){println(name+" catch mouse")}
}
class dog(val name: String)
implicit def object2Cat (obj: Object): cat = {
if (obj.getClass == classOf[dog]) {
val dog = obj.asInstanceOf[dog]
new cat(dog.name)
}
else Nil
}

执行:

scala> val d = new dog("d1")
d: dog = dog@7f0e0db3
scala> d.catchMouse()
d1 catch mouse

我们后续在工作中一般很少需要我们自己去定义隐式转换函数,大部分的场景是我们只需要使用import导入对应的隐式转换函数就可以了,在这个案例中我们是自己手工实现了一个隐私转换函数,因为他们都在一个作用域内,所以就不需要import了。

http://www.jmfq.cn/news/5104693.html

相关文章:

  • 企业网站内的问答模式怎么做/痘痘该如何去除效果好
  • 佛山手机网站建设/百度手机应用商店
  • 哪个网站可以做彩经专家/谷歌浏览器下载安装2022
  • 沈阳定制网站建设/宁波seo外包优化
  • 智慧团建入口登录网站/关键词异地排名查询
  • wordpress 多站点 无法访问/郑州网站关键词推广
  • 企业网站怎么做才能留住客户/百度账号管理中心
  • 东营市做网站的公司/seo流量是什么意思
  • 中山市城市建设档案馆网站/百度大搜数据多少钱一条
  • 如何在旅游网站上做攻略/苏州seo优化
  • 江苏网站优化/北京建站工作室
  • 济南小程序制作公司/长沙seo报价
  • 网站为什么做微云的采集/一键生成个人网站
  • 电子商务网站费用/百度推广客户端下载网址
  • qq官网登录/品牌关键词优化哪家便宜
  • 定制类网站建设/如何推广一个产品
  • 网站建设合同注意事项/可以打广告的平台
  • 做网站引流做什么类型的网站最好/太原百度快照优化排名
  • 化纤公司网站建设/网页设计用什么软件
  • 口碑好的东莞网站建设/温州seo
  • 效果图网站模板/宁波网站推广找哪家公司
  • 网站优化工作室/友情链接代码美化
  • 仿站仿淘宝客网站视频教程/如何做好营销
  • 用什么来网站开发好/bt磁力狗
  • 莱芜翰林名苑莱芜论坛/长沙网站seo外包
  • 无锡网站制作的公司有哪些/营销页面
  • 2023疫情第二波爆发时间/关键词优化怎么弄
  • 做优化送网站/网络营销方案策划案例
  • 网站建设和空间/营销案例网站
  • 太原市住房和城乡建设局网站首页/网络营销案例分析题及答案