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

网站建设教程最新资讯wordpress不显示目录文章

网站建设教程最新资讯,wordpress不显示目录文章,ip可以用wordpress,微信端网站页面设计模式匹配是检查某个值(value)是否匹配某一个模式的机制,一个成功的匹配同时会将匹配值解构为其组成部分。它是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句。 语法 一个模式匹配语句包括一个待匹配的值&a…

模式匹配是检查某个值(value)是否匹配某一个模式的机制,一个成功的匹配同时会将匹配值解构为其组成部分。它是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句。

语法

一个模式匹配语句包括一个待匹配的值,match关键字,以及至少一个case语句。

// 导入随机数生成器
import scala.util.Random// 定义主对象
object Main {// 主方法,程序入口def main(args: Array[String]): Unit = {// 生成一个0到9之间的随机整数val x:Int = Random.nextInt(10)// 使用模式匹配根据随机数的值执行不同的操作x match {// 当x为0时输出"zero"case 0 => println("zero")// 当x为1时输出"one"case 1 => println("one")// 当x为2时输出"two"case _ => println("other") // 其他情况输出"other"}}
}

上述代码中的val x是一个0到10之间的随机整数,将它放在match运算符的左侧对其进行模式匹配,match的右侧是包含4条case的表达式,其中最后一个case _表示匹配其余所有情况,在这里就是其他可能的整型值。

match表达式具有一个结果值

  def matchTest(x: Int): String = x match {case 1 => "one"case 2 => "two"case _ => "other"}println(matchTest(3)) // otherprintln( matchTest(1)) // one

这个match表达式是String类型的,因为所有的情况(case)均返回String,所以matchTest函数的返回值是String类型。

样例类(case classes)的匹配

样例类非常适合用于模式匹配。

abstract class Notificationcase class Email(sender: String, title: String, body: String) extends Notificationcase class SMS(caller: String, message: String) extends Notificationcase class VoiceRecording(contactName: String, link: String) extends Notification

Notification 是一个虚基类,它有三个具体的子类Email, SMSVoiceRecording,我们可以在这些样例类(Case Class)上像这样使用模式匹配:

def showNotification(notification: Notification): String = {notification match {case Email(sender, title, _) =>s"You got an email from $sender with title: $title"case SMS(number, message) =>s"You got an SMS from $number! Message: $message"case VoiceRecording(name, link) =>s"you received a Voice Recording from $name! Click the link to hear it: $link"}
}
val someSms = SMS("12345", "Are you there?")
val someVoiceRecording = VoiceRecording("Tom", "voicerecording.org/id/123")println(showNotification(someSms))  // prints You got an SMS from 12345! Message: Are you there?println(showNotification(someVoiceRecording))  // you received a Voice Recording from Tom! Click the link to hear it: voicerecording.org/id/123

showNotification函数接受一个抽象类Notification对象作为输入参数,然后匹配其具体类型。(也就是判断它是一个EmailSMS,还是VoiceRecording)。在case Email(sender, title, _)中,对象的sendertitle属性在返回值中被使用,而body属性则被忽略,故使用_代替。

模式守卫(Pattern guards)

为了让匹配更加具体,可以使用模式守卫,也就是在模式后面加上if <boolean expression>

def showImportantNotification(notification: Notification, importantPeopleInfo: Seq[String]): String = {notification match {case Email(sender, _, _) if importantPeopleInfo.contains(sender) =>"You got an email from special someone!"case SMS(number, _) if importantPeopleInfo.contains(number) =>"You got an SMS from special someone!"case other =>showNotification(other) // nothing special, delegate to our original showNotification function}
}val importantPeopleInfo = Seq("867-5309", "jenny@gmail.com")val someSms = SMS("867-5309", "Are you there?")
val someVoiceRecording = VoiceRecording("Tom", "voicerecording.org/id/123")
val importantEmail = Email("jenny@gmail.com", "Drinks tonight?", "I'm free after 5!")
val importantSms = SMS("867-5309", "I'm here! Where are you?")println(showImportantNotification(someSms, importantPeopleInfo))
println(showImportantNotification(someVoiceRecording, importantPeopleInfo))
println(showImportantNotification(importantEmail, importantPeopleInfo))
println(showImportantNotification(importantSms, importantPeopleInfo))

case Email(sender, _, _) if importantPeopleInfo.contains(sender)中,除了要求notificationEmail类型外,还需要sender在重要人物列表importantPeopleInfo中,才会匹配到该模式。

仅匹配类型

也可以仅匹配类型,如下所示:

abstract class Device
case class Phone(model: String) extends Device {def screenOff = "Turning screen off"
}
case class Computer(model: String) extends Device {def screenSaverOn = "Turning screen saver on..."
}def goIdle(device: Device) = device match {case p: Phone => p.screenOffcase c: Computer => c.screenSaverOn
}

当不同类型对象需要调用不同方法时,仅匹配类型的模式非常有用,如上代码中goIdle函数对不同类型的Device有着不同的表现。一般使用类型的首字母作为case的标识符,例如上述代码中的pc,这是一种惯例。

密封类

特质(trait)和类(class)可以用sealed标记为密封的,这意味着其所有子类都必须与之定义在相同文件中,从而保证所有子类型都是已知的。

sealed abstract class Furniture
case class Couch() extends Furniture
case class Chair() extends Furnituredef findPlaceToSit(piece: Furniture): String = piece match {case a: Couch => "Lie on the couch"case b: Chair => "Sit on the chair"
}

这对于模式匹配很有用,因为我们不再需要一个匹配其他任意情况的case


文章转载自:

http://vYTRZyiy.zLxrg.cn
http://nsGXmeOc.zLxrg.cn
http://L6GUgqfv.zLxrg.cn
http://NO54BvdQ.zLxrg.cn
http://vC5d3gg7.zLxrg.cn
http://HBq9ucUZ.zLxrg.cn
http://sS4L8fMr.zLxrg.cn
http://nVMp6ktT.zLxrg.cn
http://QdlanDCm.zLxrg.cn
http://RhC99YMH.zLxrg.cn
http://WraqhH9j.zLxrg.cn
http://PqvyzmB1.zLxrg.cn
http://oaYCNjwK.zLxrg.cn
http://CaMyXgBu.zLxrg.cn
http://cKS1ig0q.zLxrg.cn
http://oQ9JWSSH.zLxrg.cn
http://c77X67Cf.zLxrg.cn
http://PYY97zWJ.zLxrg.cn
http://qo48n6Fq.zLxrg.cn
http://0SZuU4nm.zLxrg.cn
http://7uGmv0aT.zLxrg.cn
http://VsD1wxzv.zLxrg.cn
http://HM2mZN89.zLxrg.cn
http://BJZwEelK.zLxrg.cn
http://hqVDmK6H.zLxrg.cn
http://3SzQ5YAn.zLxrg.cn
http://McEcyTc0.zLxrg.cn
http://qvjKvmDJ.zLxrg.cn
http://gte4IKBk.zLxrg.cn
http://4AY05Vek.zLxrg.cn
http://www.dtcms.com/wzjs/741045.html

相关文章:

  • 集团网站建设价格wordpress企业主题排行榜
  • 怎样建设一个英语网站电影网站空间配置
  • 沭阳哪里有做网站推广的通辽市工程建设网站
  • 北京微网站制作价格asp网站后台密码文件
  • 百度做网站找谁企业网站托管运营
  • 中山网站建设解决方案中国最知名的网站建设公司
  • 网站制图软件长沙网络营销外包
  • 卖主机 服务器的网站福建建设执业资格官网
  • 织梦手机网站源码网站用excel做数据库吗
  • 网站设计可以在手机上做吗深圳市南山区网站建设
  • 宁波专业网站营销合肥网站seo优化排名公司
  • 厦门网站建设公司推荐建设好的网站
  • 做调查赚钱的网站有哪些北京网站关键词
  • 网站后台html网站域名空间续费合同
  • 沈阳男科正规医院有哪些济南网站seo外包
  • 网站内页关键词密度轻博客 wordpress
  • 搞笑网站源代码网页设计怎么做
  • 泰州做网站哪家好sem与seo的区别
  • 做游戏评论注册国外网站c2c电商平台有哪几个
  • 公司网站内容建设宝安沙井天气
  • 马和人做人和牛做网站中原彼得堡航空学院网站的建设
  • 网站建设喀什可以做动画的网站
  • wordpress wp大学徐州网站seo公司
  • 山西建设工程协会网站网站备案撤销再备案
  • 娄底网站建设的公司wordpress 搜索框 位置
  • 齐河做网站公司网站维护建设的通知
  • 做盗版电影网站吗广州app设计公司
  • 什么是网站原创文章wordpress id重置密码忘记
  • 手机网站开发 和 网页怎么做网站官方电话
  • 绍兴 网站制作天津网站建设渠道