问题标签 [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 回答
3498 浏览

scala - 在 scala 中扩展部分实现的部分函数

我在这里使用 Akka 演员库。演员库定义了一个部分函数“接收”,扩展“演员”的演员必须实现它来处理各种消息。我正在为我的应用程序创建一个特征层次结构,其中特征“clockActor”扩展了 Actor,“MasterClock”和“SubClock”扩展了“clockActor”。我希望将时钟的通用功能添加到“时钟”特征的接收功能中,但是如何在主时钟和子时钟特征的接收功能中添加额外的功能?

简而言之,我需要一种将额外的 case 语句添加到偏函数的方法。想法?

0 投票
1 回答
324 浏览

scala - 检查是否为具有未知类型的值定义了scala中的部分函数

我具有以下特征(要获得 2 级多态性click

以及将部分函数转换为此特征的函数:

所以我的问题是 isDefinedAt 方法。我必须在运行时检查 A 是否是 B 的实例。a.isInstanceOf[B] 由于类型擦除而不起作用。

我尝试使用 TypeTag/ClassTag 和 B 效果很好,但 A 的类型总是 Any。

那么,如何检查 A 是否是 B 的实例?

更新:我在这段代码中使用它:

如果我直接使用 ~>,那么 typeTag[A].tpe <:< typeTag[B].tpe 一切正常。

但是如果我将它与这个映射函数一起使用,typeTag[A].tpe 总是 Any。

0 投票
1 回答
1021 浏览

scala - 如何避免在模式匹配保护中显式调用 .isDefinedAt()

我有一些基于 Akka 的演员系统,其中多种演员基于相同的模板,因为这些演员仅在响应值类型上有所不同。例如:

部分函数有一种方法可以避免类型擦除,这使我无法简单

同时强迫我if dataFunction.isDefinedAt(data)对模式产生警惕,我根本不喜欢它。

有什么方法可以避免显式保护?

我现在发现的唯一方法是引入一些愚蠢的提取器:

但也许它已经在标准库的某个地方完成了?或者也许还有其他类似于集合collect方法的方法,但用于匹配?

结论

经过一番思考,我回到了提取器对象,并在@pagoda_5b 建议的帮助下将其移动到了一个特征中:

0 投票
1 回答
1875 浏览

scala - 链接部分函数时如何避免“缺少类型”错误

我目前正在研究 Scala & Akka 并为其开发测试应用程序。在这个应用程序中,几乎所有参与者都记录未处理的消息以便于调试:

正如我所说,这样的代码几乎存在于我所有的代理中,我开始考虑将其转化为特征:

并在喜欢后使用它

我主要想知道结构子类型是否允许我这样做,或者TestActor#ReceiveLogUnhadled#Receive是不同的类型,但即使在此之前我已经有了

现在我不知道如何避免这种情况,除了将第一个{...}块移动到单独的函数中:

当然,后者会做,但它有点“漏掉了重点”并造成了一些其他副作用,比如“考虑适当的函数名而不是receive”......

所以我想知道:是否可以通过某种方式声明(Any) => Unit函数签名“就地”来避免“缺少类型参数错误”?

0 投票
2 回答
143 浏览

scala - 使用偏函数实现 scala 方法

我有一堂课,如下:

我很好奇是否可以greet使用该方法的部分应用来实现hello?就像是:

(显然这不起作用)

0 投票
2 回答
965 浏览

scala - PartialFunction 和 MatchError

定义 PF 有两种方法:1)使用文字case {}语法和 2)作为显式类。我需要以下函数抛出一个 MatchError,但在第二种情况下不会发生。

1) 带外壳

2)作为类

在第二种情况下,我是否应该手动调用isDefinedAt,不应该由编译器隐式调用吗?

0 投票
3 回答
138 浏览

scala - Scala PartialFunction 构造不同的结果

我试图调试为什么某些部分函数组合不起作用,当我注意到取决于您实例化部分函数的方式,您会得到不同的结果。

当您使用语法糖方法时,一切都按预期工作:

但是,如果您使用 PartialFunction 对象,它就不再起作用了。

这是为什么?您通常会期望 Object 的 apply 方法的行为类似于 Class 的构造函数。

0 投票
3 回答
262 浏览

scala - Scala中的魔术PartialFunction

我不认为这段代码应该工作,但它确实(在 Scala 2.10 中):

它是如何工作的?我希望 aMatchError被扔进去res0

Scala 语言规范似乎没有明确记录res0应该如何解释。

0 投票
2 回答
231 浏览

scala - 为什么这个 PartialFunction 被定义但在 Scala 中应用后仍然崩溃(正确)?

我想尝试使用深度模式匹配用例的部分函数。这最初(当然)在应用 Some(Some(3)) 后不起作用,但似乎已定义:

我认为通过解耦嵌套模式匹配,事情会更容易:

但结果如下:

并在申请后:

我做错了什么吗?当我按顺序组成 deepTestLvl{1,2} 并给我正确答案时,不应该调用 isDefinedAt 两次吗?

0 投票
4 回答
8407 浏览

scala - “case”在 Scala 的部分函数中究竟是如何工作的?

我刚刚开始使用 Scala 进行看似陡峭的学习曲线,并且不能完全掌握“案例”在部分函数中的工作原理。

我查看了 PartialFunction 本身的定义,我看到了如下示例:

我卡住的部分是case x if x%2 - Scala 怎么知道这里是什么?这个“案例”陈述/关键字的正式定义是什么?

我认为我感到困惑的一个原因是因为在 Lift 中我看到了以下内容(在 Actor 类中):

我有点直观地理解这里发生了什么,但我无法对应该如何使用“案例”进行某种统一的定义。更让我困惑的是 Scala 编译器是如何解开这一切的。