scala – PartialFunction类型
发布时间:2020-12-16 09:59:14 所属栏目:安全 来源:网络整理
导读:在 scala play框架中,我看到了这段代码: abstract class AnalyserInfocase class ColumnC(typeName:String,fieldName:String) extends AnalyserInfocase class TableC(typeName:String) extends AnalyserInfo val asIs :PartialFunction[AnalyserInfo,Strin
在
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,它允许您查询是否为某些参数定义了函数.
没有匹配的情况是定义部分函数的特殊语法,它生成一个isDefinedAt,它对所有匹配的情况都返回true. 假设我们有一个返回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可能只使用某些类型的消息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |