risc-v中文社区

 找回密码
 立即注册
查看: 996|回复: 0

[原创] risc-v开发基础 Scala 偏函数终极理解---(33)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-28 23:55:53 | 显示全部楼层 |阅读模式
我们用过多种偏函数形式:
{case x => x.toString}
也用过:
{case x:Int => x+1}
也用过:
{case Animal(name,age) => ....}
也用过:
存在一个偏函数:val fp: ParitalFunction[Int,Any] = {
case x if(x==1 || x==2) => x.toString
}
将fp用于下面类的主构造参数中
class XXX(f: (a,b,c)=>PartialFunction[Int,Any])
{
  def method(x,y,z,arg) {
        val g = f(x,y,z)
        if(g.isDefinedAt(arg) g.apply(arg)
        else "null"
}
特别是下面:
val l1: List[Int]=>Int = { //全部List[Int]类型的所有可能的都是合格的参数
  case x :: y :: _ =>y   //所以只传参数List(1)则异常
}
val l2: PartialFunction[List[Int],Int] = {
  case x :: y :: _ =>y
}
println(l1(List(1,2,3)))
println(l1(List(1,2)))
//println(l1(List(1))) 异常
println(l2(List(1,2)))
if(l2.isDefinedAt(List(5))) println(l2(List(5))) //不会显示 但不会异常 ,如果不用isDefinedAt进行判断直接println(l2(List(5)))则就会异常
else println("not defined at") //只显示这一行

总之,有很多种情况我们都用过了,但不管是哪种使用形式,偏函数有一个终极使用原则意见:
参数类型虽然被确定了,但并不是所有这种类型的参数都可以使用,必须是isDefinedAt返回
值是true的参数才可以调用取得值

回复

使用道具 举报

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

本版积分规则



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

GMT+8, 2024-4-25 11:38 , Processed in 0.016865 second(s), 17 queries .

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

Copyright © 2018-2021, risc-v open source

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