gpt4 book ai didi

scala - 偏函数类型

转载 作者:行者123 更新时间:2023-12-04 17:57:18 25 4
gpt4 key购买 nike

在 Scala Play 框架中,我看到了这段代码:

abstract class AnalyserInfo
case class ColumnC(typeName:String,fieldName:String) extends AnalyserInfo
case class TableC(typeName:String) extends AnalyserInfo

val asIs :PartialFunction[AnalyserInfo,String] = {
case ColumnC(_,f) => f;
case TableC(typeName) => typeName
}

有什么区别:
val asIs: (AnaliserInfo)=>String = (info) => info match {
case ColumnC(_,f) => f;
case TableC(typeName) => typeName
}

有喜欢的款式吗?为什么在第一种情况下可以省略 match 关键字?

谢谢你的支持。

最佳答案

Double => Double只是 Function[Double, Double] 的简写. PartialFunction继承自 Function但增加了一些方法。最重要的是,它添加了方法 isDefinedAt它允许您查询是否为某个参数定义了该函数。
case不匹配的 s 是定义部分函数的特殊语法,它生成 isDefinedAt返回 true对于所有匹配 case s。

假设我们有一个返回 1/x 的函数,但仅对于 x 的正值,我们可以将其定义为:

scala> val f: (Double => Double) = { case x if x > 0 => 1/x }             
f: (Double) => Double = <function1>

或作为:
scala> val g: PartialFunction[Double, Double] = { case x if x > 0 => 1/x }
g: PartialFunction[Double,Double] = <function1>

第二个版本的好处是我们可以检查函数是否适用于某些参数:
scala> g.isDefinedAt(-3)
res0: Boolean = false

例如,此功能在 Scala 中用于实现 Actor 库,其中 Actor 可能仅使用某些类型的消息。

关于scala - 偏函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5841156/

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