scala偏函数——不和match一起使用的case序列

1 case样本序列先看一段代码 val func1: Int => Int = { case x => 1 }等号的右边是{case x => 1},一对花括号包裹着一个case语句。这样的用法看到过很多次,但是很少有资料解释为什么可以这样用。查阅过很多资料,最终在《programming in Scala》(scala编程:黄海旭,高...
摘要由CSDN通过智能技术生成

case样本序列

新增

原先的文章里定义形如:{case x => 1} 的语句为样本序列。并说道样本序列就是函数字面量。但最近读文章发现这种语句还有一个说法:偏函数(不同于偏应用函数)

偏函数的定义是相对于正常函数而言的。如果说正常函数的能处理他定义参数类型的所有实例。那偏函数就只能处理其定义类型的部分实例(真子集)。例如:

def fun (a:Int) => println(x) // 这是一个普通函数,这个函数可以处理所有Int 类型的参数

def fun : Int => Unit = {case 0 if x %2 ==0 => println(0)} // 这是一个偏函数,这个函数可以处理所有偶数类型的参数。偶数是Int的子集。

偏函数还有一些其他的性质:

  1. 偏函数只能接受一个参数(这是设计层面的考虑,理论上如果需要多个参数可以考虑用元组)
  2. 根据偏函数特质的定义:trait PartialFunction[-A, +B] extends (A) ⇒ B 。“-”符号作用于类型表示逆变,-A表明输入参数为A类型或A类型的父类,也就是说输入的参数应为A的子集,具有“部分”的含义。
  3. 前面说到偏函数只能处理参数定义类型的子集。但是真正能否处理一个具体的实例可以通过 “def isDefinedAt(a: A):Boolean”方法判断。

分割线 ·····················································
先看一段代码

    val func1: Int =>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值