- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Scala 中,PartialFunction[A, B]
类派生自类型 Function[A, B]
(请参阅 Scala 引用,12.3.3)。然而,这对我来说似乎违反直觉,因为 Function
(需要为所有 A
定义)比 PartialFunction
具有更严格的要求,在某些地方可能未定义。
我遇到的问题是,当我有部分函数时,我无法使用 Function
来扩展部分函数。例如。我做不到:
(pf orElse (_)=>"default")(x)
(希望语法至少是正确的)
为什么这个子类型是相反的?是否有任何我忽略的原因,例如 Function
类型是内置的?
顺便说一句,如果 Function1 :> Function0
也很好,所以我不需要在上面的示例中使用虚拟参数:-)
通过查看两个示例可以强调两种方法之间的差异。哪一个是正确的?
一:
val zeroOne : PartialFunction[Float, Float] = { case 0 => 1 }
val sinc = zeroOne orElse ((x) => sin(x)/x) // should this be a breach of promise?
两个:
def foo(f : (Int)=>Int) {
print(f(1))
}
val bar = new PartialFunction[Int, Int] {
def apply(x : Int) = x/2
def isDefinedAt(x : Int) = x%2 == 0
}
foo(bar) // should this be a breach of promise?
最佳答案
因为在 Scala 中(与任何图灵完备语言一样),不能保证函数是完整的。
val f = {x : Int => 1 / x}
该函数未在 0 处定义。 PartialFunction 只是一个 promise 告诉您未定义位置的函数。尽管如此,Scala 仍然可以让您轻松地做您想做的事情
def func2Partial[A,R](f : A => R) : PartialFunction[A,R] = {case x => f(x)}
val pf : PartialFunction[Int, String] = {case 1 => "one"}
val g = pf orElse func2Partial{_ : Int => "default"}
scala> g(1)
res0: String = one
scala> g(2)
res1: String = default
如果您愿意,可以将 func2Partial 设为隐式。
关于scala - 为什么 PartialFunction < : Function in Scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930698/
这有效: 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
我是一名优秀的程序员,十分优秀!