【发布时间】:2015-09-23 11:13:43
【问题描述】:
在thisscala中偏函数的解释中,使用case语句如下:
val divide2: PartialFunction[Int, Int] = {
case d: Int if d != 0 => 42 / d
}
然后它说:
虽然这段代码没有显式实现 isDefinedAt 方法,它的工作原理与前面的除法函数完全相同 定义
前面的divide函数明确定义apply和isDefined方法如下:
val divide = new PartialFunction[Int, Int] {
def apply(x: Int) = 42 / x
def isDefinedAt(x: Int) = x != 0
}
我看到编译器在这里做了某种魔术,但我很好奇机制的本质:案例中的守卫(如果 d != 0)是否在后台提取到 isDefined 的主体中?有自己的警卫的多个案例陈述呢?函数的域是在 case 语句中定义的,因此这必须是编译器在幕后构建 isDefined 实现的方式。
我说的对吗?
【问题讨论】:
标签: scala partialfunction