问题标签 [partialfunction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
252 浏览

scala - Scala PartialFunctions 来自具体的

有没有什么快速的方法可以用作一个具体的函数(例如,类型(A) => B)作为一个PartialFunction[A, B]?我所知道的最简洁的语法是:

是否有任何地方的隐式转换,例如:

我想我只是写了我正在寻找的东西,但这是否已经存在于 Scala 库中?

0 投票
2 回答
1082 浏览

scala - 部分函数模式匹配拆分为一个类和一个特征

Lift 在他们的 Comet Actors 实现中使用了 PartialFunction,你通常会在你的类中得到这个:

我想做的,我不确定是否有可能拆分部分函数,​​以便最后一个案例可以移动到一个特征中。

所以当我有一个新的彗星演员时,我只是这样做:

不知何故,特征 MyActorTrait 将缺少

0 投票
7 回答
6676 浏览

scala - Scala中的空部分函数

在我看来{ case ... => ... },部分函数的语法至少需要一个case

那么,定义“空”部分函数的最佳方法是什么?有没有比“手动”覆盖isDefinedAt和更好的方法apply

0 投票
2 回答
306 浏览

scala - 如何定义更简洁的scala函数

我正在使用 akka 库并提供部分功能,由演员在运行时通过热交换实现。

akka 热交换采用 PartialFunction[Any, Unit] 形式的参数。我将我的定义如下:

所以为了使用这个函数,我必须提供一个新的 Fake1Reader().read。

有没有更简洁的方法来使用应用或扩展函数或 PartialFunction 来做这个类?

0 投票
2 回答
73 浏览

scala - 从部分案例中提取主要价值

假设我正在定义一些匹配的情况,我只关心验证一个参数:

其中函数签名是:

如何返回整个匹配的CallProperty对象?我可以创建一个新的,但这有点难看。有什么方法可以参考原件代替xxx吗?

0 投票
2 回答
494 浏览

scala - Scala:选择返回 Option 与 PartialFunction 的函数

我是一个相对的 Scala 初学者,想要一些关于如何继续实现的建议,看起来它可以通过函数返回 Option 或 PartialFunction 来完成。我已经阅读了我能找到的所有相关帖子(见问题底部),但这些似乎涉及使用 PartialFunction 或将一个转换为另一个的技术细节;我正在寻找“如果情况是 X、Y、Z,则使用 A,否则使用 B,但也考虑 C”类型的答案。

我的示例用例是使用路径查找器库在位置之间进行路径搜索。假设位置是类型L,路径是类型P,并且所需的路径搜索结果是Iterable[P]. 补丁搜索结果应该通过询问所有路径查找器(在 Google 地图中,这些可能是自行车、汽车、步行、地铁等)的路径建议来组装,这些建议可能会或可能不会针对特定的开始/结束位置对。

似乎有两种方法可以解决这个问题:

(a)定义一个路径查找器f: (L,L) => Option[P],然后通过类似的东西得到结果finders.map( _.apply(l1,l2) ).filter( _.isDefined ).map( _.get )

(b) 将路径查找器定义为f: PartialFunction[(L,L),P] and then get the result via something likefinders.filter(_.isDefined((l1,l2))).map(_.apply((l1,l2)))`

似乎使用返回函数Option[P]可以避免对结果进行双重评估,因此对于昂贵的计算,这可能是可取的,除非缓存结果。似乎使用Option一个可以具有任意输入签名,而PartialFunction需要一个参数。但我特别想听到有实践经验的人关于不太直接、更“大局”的考虑,例如与 Scala 库的交互。使用PartialFunction集合 API 的某些方法是否有显着的好处,而这些方法可能会以其他方式得到回报?这样的代码通常会更简洁吗?

相关但不同的问题:

0 投票
3 回答
1479 浏览

scala - Scala PartialFunction 可以是 Monoid 吗?

我认为PartialFunction可以是Monoid。我的思维过程正确吗?例如,

但当前版本的 Scalaz(6.0.4) 不包括在内。有什么不包括在内的原因吗?

0 投票
3 回答
2710 浏览

java - 在 Java 中实现 Scala PartialFunction 的最简单方法是什么?

为了互操作性,我需要从 Java 代码中传递一个 Scala PartialFunction。对于函数(Function1 等),有一个 AbstractFunction,我可以使用匿名类型进行子类化,但对 PartialFunction 执行相同操作的最简单方法是什么?

在这种情况下,我很乐意让它成为 Java 中的“完整”函数,为所有值定义,但类型为 PartialFunction。

0 投票
1 回答
143 浏览

scala - Scala:当类型参数是成员类型时,让集合的类型参数在“收集”中存活

通常,当收集与特定类型匹配的序列的所有元素时,生成的集合既有原始集合的类型,也有为以下选择的类型:

当输入类型由有界成员类型参数化并且我想要返回的只是由绑定类型(不是成员类型)参数化的序列时,这甚至可以工作:

但是,当我实际上想要返回由成员类型参数化的序列时,这会失败:

错误信息:

为了恢复功能,我可以在collect调用中包含成员类型,但这似乎是多余的,因为由于签名,每个元素都必须匹配该类型:

有没有办法定义一系列成员类型,以便他们在collect编辑时记住他们的成员类型?

0 投票
1 回答
123 浏览

scala - 使用 resetLocalAttrs 时出现奇怪的错误

我编写了一个宏,它使用(宏)上下文的 resetLocalAttrs 方法。宏展开后,我收到一个奇怪的错误,我无法弄清楚发生了什么。首先,我将介绍问题。我们有两个原语:状态(我将表示为一个简单的 Int)和动作。状态代表系统的当前状态,而动作负责修改状态。动作可以是原子的或由原子动作组成。

从代码中可以看出,AndNext接收一个部分函数,​​因为它可以根据当时的当前状态启动一个或另一个动作。组合动作内部的原子动作可能需要序列中前一个原子动作留下的前一个状态,所以我需要用Int => Action保护它。

让我们测试代码,使用一个虚拟函数强制测试需要一个Int => Action参数:

没关系,但是我正在研究 DSL,编写所有那些冗余的隐式状态太冗长了,必须隐藏它们才能使这段代码适合 DSL 使用。试图达到以下可爱的调用......

我已经实现了一个宏,它将动作转换为受保护的动作(记住 Int => Action):

(*) 注意宏声明中的隐式,它转换视图中的方法。

前者(和评论) reify 工作正常,但由于一些限制,我必须使用调用resetLocalAttrs()的 reify (你不想知道,这个问题变得太长:)。这个 reify 失败并出现一个奇怪的错误:

我在哪里尝试实例化 Any?为什么重置对 AST 的影响如此之大?我已经使用了很多次,它很好地重置了类型和符号。

找到问题的更好方法是什么?我一直在使用 showRaw 启用类型ids标志,这变得相当困难。