gpt4 book ai didi

scala - PartialFunction 和 MatchError

转载 作者:行者123 更新时间:2023-12-02 01:59:48 26 4
gpt4 key购买 nike

定义 PF 有两种方式: 1) 使用文字 case {}语法和 2) 作为显式类。我需要以下函数抛出一个 MatchError,但在第二种情况下不会发生。

1) 带外壳

val test: PartialFunction[Int, String] =  {
case x if x > 100 => x.toString
}

2)作为类
val test = new PartialFunction[Int, String] {
def isDefinedAt(x: Int) = x > 100
def apply(x: Int) = x.toString
}

在秒的情况下,我是否应该手动调用 isDefinedAt ,不应该由编译器隐式调用吗?

最佳答案

您必须调用 isDefinedAt手动在您的 apply方法:

val test = new PartialFunction[Int, String] {
def isDefinedAt(x: Int) = x > 100
def apply(x: Int) = if(isDefinedAt(x)) x.toString else throw new MatchError(x)
}

如果你想避免这段代码,你可以简单地使用第一种方法来定义你的部分函数。它是语法糖,会产生两个 isDefinedAt 的有效定义。和 apply .如 Scala language specification 中所述,您的第一个定义将扩展为以下内容:
val test = new scala.PartialFunction[Int, String] {
def apply(x: Int): String = x match {
case x if x > 100 => x.toString
}
def isDefinedAt(x: Int): Boolean = {
case case x if x > 100 => true
case _ => false
}
}

关于scala - PartialFunction 和 MatchError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com