risc-v中文社区

 找回密码
 立即注册
查看: 1124|回复: 1

[原创] risc-v开发基础 Scala 偏函数---(23)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-25 10:43:33 | 显示全部楼层 |阅读模式
val partialFunction : PartialFunction[List[Int],String] = {
  case 10::_ => "head is 10"
  case x::12::_ => "mid is 12"
  case x::y::_ => y.toString  //如何判断位置不定的中间某个值
  case g ::_  if g == 2=>"head is g==2"  //加条件判断
  case g ::_  if g == 1=>"head is g==1"
  case _ => "unknow List"
}
//上面 val partialFunction : PartialFunction[List[Int],String] = {...}
//其中大括号中内容就会被编译器解释成:
//new PartialFunction[List[Int],String] = {// def apply(xs: List[Int]) = xs match {      
//      case 10::_ => "head is 10"
//      case x::12::_ => "mid is 12"
//      case x::y::_ => y.toString  //如何判断位置不定的中间某个值
//      case g ::_  if g == 2=>"head is g==2"
//      case g ::_  if g == 1=>"head is g==1"
//      case _ => "unknow List"
//  }
//  def isDefinedAt(xs: List[Int] = xs match {
//      case 10::_ => true
//      case x::12::_ => true
//      case g ::_  if g == 2=>true
//      case g ::_  if g == 1=>true
//      case x::y::_ => true
//      case _ => true  //所以偏函数应用的时候最好不要将所有匹配都有,只能是你需要的才放进去,否则所有匹配你都要处理
//  }
val r = partialFunction(List(10,12,13,18))
println(r)
val r1 = partialFunction(List(1,12,13,18))
println(r1)
val r2 = partialFunction(List(101,112,13,18))
println(r2)
val r3 = partialFunction(List(1))
println(r3)  
显示如下:
head is 10
mid is 12
112
head is g==1

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-8-25 10:50:55 | 显示全部楼层
val tuple = ("name",10,"wuhan")
val rtu: PartialFunction[(String,Int,String),String] = {
  case (name,_,_) if name.equals("zs") =>"name is " + name
  case (name,_,_) => "other name is " + name
}
println(rtu(tuple))
println(rtu("zs",10,"wuhan"))
println(rtu(tuple))
显示如下:
other name is name
name is zs
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-30 11:37 , Processed in 0.017026 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表