问题标签 [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.
scala - 在 scala 中扩展部分实现的部分函数
我在这里使用 Akka 演员库。演员库定义了一个部分函数“接收”,扩展“演员”的演员必须实现它来处理各种消息。我正在为我的应用程序创建一个特征层次结构,其中特征“clockActor”扩展了 Actor,“MasterClock”和“SubClock”扩展了“clockActor”。我希望将时钟的通用功能添加到“时钟”特征的接收功能中,但是如何在主时钟和子时钟特征的接收功能中添加额外的功能?
简而言之,我需要一种将额外的 case 语句添加到偏函数的方法。想法?
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。
scala - 如何避免在模式匹配保护中显式调用 .isDefinedAt()
我有一些基于 Akka 的演员系统,其中多种演员基于相同的模板,因为这些演员仅在响应值类型上有所不同。例如:
部分函数有一种方法可以避免类型擦除,这使我无法简单
同时强迫我if dataFunction.isDefinedAt(data)
对模式产生警惕,我根本不喜欢它。
有什么方法可以避免显式保护?
我现在发现的唯一方法是引入一些愚蠢的提取器:
但也许它已经在标准库的某个地方完成了?或者也许还有其他类似于集合collect
方法的方法,但用于匹配?
结论
经过一番思考,我回到了提取器对象,并在@pagoda_5b 建议的帮助下将其移动到了一个特征中:
scala - 链接部分函数时如何避免“缺少类型”错误
我目前正在研究 Scala & Akka 并为其开发测试应用程序。在这个应用程序中,几乎所有参与者都记录未处理的消息以便于调试:
正如我所说,这样的代码几乎存在于我所有的代理中,我开始考虑将其转化为特征:
并在喜欢后使用它
我主要想知道结构子类型是否允许我这样做,或者TestActor#Receive
会LogUnhadled#Receive
是不同的类型,但即使在此之前我已经有了
现在我不知道如何避免这种情况,除了将第一个{...}
块移动到单独的函数中:
当然,后者会做,但它有点“漏掉了重点”并造成了一些其他副作用,比如“考虑适当的函数名而不是receive
”......
所以我想知道:是否可以通过某种方式声明(Any) => Unit
函数签名“就地”来避免“缺少类型参数错误”?
scala - 使用偏函数实现 scala 方法
我有一堂课,如下:
我很好奇是否可以greet
使用该方法的部分应用来实现hello
?就像是:
(显然这不起作用)
scala - PartialFunction 和 MatchError
定义 PF 有两种方法:1)使用文字case {}
语法和 2)作为显式类。我需要以下函数抛出一个 MatchError,但在第二种情况下不会发生。
1) 带外壳
2)作为类
在第二种情况下,我是否应该手动调用isDefinedAt
,不应该由编译器隐式调用吗?
scala - Scala PartialFunction 构造不同的结果
我试图调试为什么某些部分函数组合不起作用,当我注意到取决于您实例化部分函数的方式,您会得到不同的结果。
当您使用语法糖方法时,一切都按预期工作:
但是,如果您使用 PartialFunction 对象,它就不再起作用了。
这是为什么?您通常会期望 Object 的 apply 方法的行为类似于 Class 的构造函数。
scala - Scala中的魔术PartialFunction
我不认为这段代码应该工作,但它确实(在 Scala 2.10 中):
它是如何工作的?我希望 aMatchError
被扔进去res0
。
Scala 语言规范似乎没有明确记录res0
应该如何解释。
scala - 为什么这个 PartialFunction 被定义但在 Scala 中应用后仍然崩溃(正确)?
我想尝试使用深度模式匹配用例的部分函数。这最初(当然)在应用 Some(Some(3)) 后不起作用,但似乎已定义:
我认为通过解耦嵌套模式匹配,事情会更容易:
但结果如下:
并在申请后:
我做错了什么吗?当我按顺序组成 deepTestLvl{1,2} 并给我正确答案时,不应该调用 isDefinedAt 两次吗?
scala - “case”在 Scala 的部分函数中究竟是如何工作的?
我刚刚开始使用 Scala 进行看似陡峭的学习曲线,并且不能完全掌握“案例”在部分函数中的工作原理。
我查看了 PartialFunction 本身的定义,我看到了如下示例:
我卡住的部分是case x if x%2 - Scala 怎么知道这里是什么?这个“案例”陈述/关键字的正式定义是什么?
我认为我感到困惑的一个原因是因为在 Lift 中我看到了以下内容(在 Actor 类中):
我有点直观地理解这里发生了什么,但我无法对应该如何使用“案例”进行某种统一的定义。更让我困惑的是 Scala 编译器是如何解开这一切的。