scala – 反向部分功能的提升方法
发布时间:2020-12-16 09:43:31 所属栏目:安全 来源:网络整理
导读:PartialFunction的提升方法将PartialFunction转换为返回选项结果的函数。 是否有反向操作,将Function1 [A,选项[B]]转换为PartialFunction [A,B]? 解决方法 不在图书馆,但很容易建立。然而,isDefinedAt将必须完全评估功能,使其比典型的从模式匹配构建
PartialFunction的提升方法将PartialFunction转换为返回选项结果的函数。
是否有反向操作,将Function1 [A,选项[B]]转换为PartialFunction [A,B]? 解决方法
不在图书馆,但很容易建立。然而,isDefinedAt将必须完全评估功能,使其比典型的从模式匹配构建的部分功能更昂贵,并且还可能导致不必要的副作用。
scala> def unlift[A,B](f : (A => Option[B])) = new PartialFunction[A,B] { | def isDefinedAt(x : A) = f(x).isDefined | def apply(x : A) = f(x).get | } unlift: [A,B](f: (A) => Option[B])java.lang.Object with PartialFunction[A,B] scala> def f(x : Int) = if (x == 1) Some(1) else None f: (x: Int)Option[Int] scala> val g = unlift(f) g: java.lang.Object with PartialFunction[Int,Int] = <function1> scala> g.isDefinedAt(1) res0: Boolean = true scala> g.isDefinedAt(2) res1: Boolean = false scala> g(1) res2: Int = 1 scala> g(2) java.util.NoSuchElementException: None.get at scala.None$.get(Option.scala:262) at scala.None$.get(Option.scala:260) at $anon$1.apply(<console>:7) at scala.Function1$class.apply$mcII$sp(Function1.scala:39) at $anon$1.apply$mcII$sp(<console>:5) at .<init>(<console>:9) at .<clinit>(<console>) at RequestResult$.<init>(<console>:9) at RequestResult$.<clinit>(<console>) at RequestResult$scala_repl_result(<console>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$17.apply(Interpreter.scala:988) at scala.tools.... 纯粹主义者也可能用一个try / catch块来包装isDefinedAt,以在异常中返回false。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Atitit 动态调用webservice与客户端代理方式调用
- 第12章 应用 AngularJS 构建单页面应用程序(MVC+EntityFram
- Bootstrap 学习之 (一) ------ 网格系统
- unix – shell脚本“for”循环语法
- angularjs – 为什么使用if(!$scope $$phase)$scope $appl
- scala – :22:错误:未找到:值sc
- scala – 建模两种类型之间的二元关系
- MacOs -bash: warning: setlocale: LC_CTYPE: cannot chang
- 【Webservice】——WSDL和SOAP
- mysql触发器(trigger)操作memcache