- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我想了一段时间的事情。我经常看到这种模式:
if (pf.isDefinedAt(in)) pf(in)
object Ex1 {
def unapply(in: Int) : Option[String] = {
println("Ex1")
if (in == 1) Some("1") else None
}
}
object Ex2 {
def unapply(in: Int) : Option[String] = {
println("Ex2")
if (in == 2) Some("2") else None
}
}
val pf : PartialFunction[Int,String] = {
case Ex1(result) => result
case Ex2(result) => result
}
val in = 2
if (pf.isDefinedAt(in)) pf(in)
Ex1
Ex2
Ex1
Ex2
res52: Any = 2
scala> pf.lift(2)
Ex1
Ex2
Ex1
Ex2
res55: Option[String] = Some(2)
最佳答案
有a conversation going on about this现在在 Scala 内部 邮寄名单。 Martin Odersky 提出了一种新类型:FunctionWithDefault
. Martin 不仅谈到了运行时的惩罚,还谈到了使用 PartialFunction
的编译时惩罚(类文件膨胀)。 :
First, we need to generate the pattern matching code twice, once in the apply and then again in the isDefinedAt. Second, we also need to execute the code twice, first to test whether the function is applicable, and then to actually apply it.
PartialFunction
)也不会由于向后兼容性问题而改变(例如,如果
isDefinedAt
有副作用怎么办)。
FunctionWithDefault
没有
isDefinedAt
并有一个方法:
trait FunctionWithDefault[-I, +O] {
def applyOrElse[OO >: O](i : I, default : I => OO) : OO
}
Option
s
getOrElse
方法。
关于scala - PartialFunction 设计效率低下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064859/
这有效: scala> List(1, "aa") collect { case n : Int => n+2 } res52: List[Int] = List(3) 这很好用: scala> v
PartialFunction 是一个天然的提取器,它的 lift 方法提供了精确的提取器功能。所以使用部分函数作为提取器会非常方便。这将允许以比可用于 PartialFunction 的普通 orE
这是我想了一段时间的事情。我经常看到这种模式: if (pf.isDefinedAt(in)) pf(in) 通过将其分解为两个单独的调用,所有在#isDefinedAt 中求值的模式也将在#appl
让我们定义一个 PartialFunction[String, String]和一个 PartialFunction[Any, String] 现在,给定 orElse 的定义 def orElse[
如何拦截 PartialFunction?例如在 Actor 中,如果我只想打印进入以下接收方法的所有内容,然后再将其传递给流程方法: class MyActor extends Actor {
我有一个名为 errorMap 的 PartialFuncton[Throwable,Future[Result]] 将 throwable 转换为结果或失败的 future 。我可以像这样通过 li
定义 PF 有两种方式: 1) 使用文字 case {}语法和 2) 作为显式类。我需要以下函数抛出一个 MatchError,但在第二种情况下不会发生。 1) 带外壳 val test: Parti
所以,假设我想为 PartialFunction 提供一个“包罗万象”的回退: val foo: PartialFunction[Int, String] = { case 1 => "foo" }
我不认为这段代码应该有效,但它确实有效(在 Scala 2.10 中): scala> ((i: Int) => i.toString match { | case s
我之前问过这个问题:Combine a PartialFunction with a regular function 然后意识到,我实际上并没有问对。 所以,这是另一个尝试。 如果我这样做: va
我正在学习Scala,从scala doc中找到PartialFunction和Function1的定义,如下所示: trait PartialFunction[-A, +B] extends (A)
偏函数 在 Scala 中,一个 PartialFunction 简而言之,是一个额外定义了一个 isDefinedAt 的函数方法。 用一系列 case 很容易定义偏函数陈述。一个简单的例子是,例如
我以为PartialFunction可以 Monoid .我的思维过程正确吗? 例如, import scalaz._ import scala.{PartialFunction => -->} im
在 Scala 中,PartialFunction[A, B] 类派生自类型 Function[A, B](请参阅 Scala 引用,12.3.3)。然而,这对我来说似乎违反直觉,因为 Functio
我对 scala 编译器允许编译这个相当奇怪、明显错误的代码这一事实感到有点失望: val foo: PartialFunction[Any, Unit] = { case s: String =
Scala API 中没有内置函数可以将 PartialFunction 提升为 Either。 这是我的版本: def liftToEither[A, B, C](pf: PartialFunc
在 scala 中,Futures 有一种采用 PartialFunction 的救援函数。如果 Future 通过响应解决,则跳过此代码,但如果发生故障,则会调用此代码。 我想简单地将部分函数包装在
我定义了 PartialFunction 的 2 个版本在斯卡拉。 val doubleEvens1: PartialFunction[Int, Int] = { case x if x
当第一个函数具有 case _ => 通配符模式时,是否有可能 orElse 组成两个 PartialFunction 匹配因此有效的任何内容是一个总函数。 例如给定 val pf1: Partial
我正在尝试将部分函数传递给通过滑动窗口在 DStream 批处理中捕获的所有 RDD 的并集。假设我在离散为 1 秒批处理的流上构造了一个超过 10 秒的窗口操作: val ssc = new Str
我是一名优秀的程序员,十分优秀!