问题标签 [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 - 是否可以从函数体中取消当前的部分函数?
我需要定义一些部分函数来处理具有不同模式的不同 url(使用 unfinagled):
你可以看到我最终将一些部分功能组合成一个完整的路线。最后一个是NotFound
处理不匹配的url,所以我不想关心早期路由中的不匹配情况(比如,assertRoutes
)。
但是在该assetsRoutes
方法中,我无法轻松检查资产是否存在于case
零件中,因为我只想为资产触摸一次文件系统。所以我不想写:
虽然我可以编写unapply
如下自定义:
case AssetExistWithContent(content)
但我认为在匹配 url 或请求时看不到部分。
所以我想知道是否可以取消函数体中的当前部分函数?所以我可以写:
在这个方法中我不需要关心什么时候做(NotFound 或其他事情),只要告诉调用者我无法处理它,请尝试下一个。
scala - orElse 如何在 PartialFunctions 上工作
orElse
使用定义的方法,我得到了非常奇怪的行为(至少在我看来)PartialFunction
在我看来:
有道理,但这不是它的行为方式,我很难理解为什么类型签名似乎表明了我在上面公开的内容。
以下是我在 Scala 2.11.2 中观察到的记录:
注意它的返回类型val b
并没有扩大PartialFunction的类型。
但这也不能按预期工作:
scala - PartialFunction orElse 的类型界限是否比应有的宽松?
让我们定义一个PartialFunction[String, String]
和一个PartialFunction[Any, String]
现在,给定orElse
我希望不能组成这两个,因为
A
→ String
A1
→Any
因此界限A1 <: A
(ie Any <: String
) 不成立。
出乎意料的是,我可以组合它们并获得PartialFunction[String, String]
对整个String
域的定义。这是一个例子:
此外,如果我明确提供orElse
类型参数
编译器终于显示出一些意义。
有没有我遗漏的类型系统巫术b
可以作为有效的论据orElse
?换句话说,怎么会A1
被推断为String
?
如果编译器A1
从那里推断b
它必须是Any
,那么导致String
开始的推断链在哪里呢?
更新
在玩过 REPL 之后,我注意到当类型不匹配时会orElse
返回一个交集类型。A with A1
例子:
由于(String with Int) <:< String
这行得通,即使生成的函数实际上不可用。我也怀疑那String with Any
是统一的Any
,因为
所以这就是为什么混合String
和Any
结果成String
.
话虽如此,引擎盖下发生了什么?不匹配的类型是在什么逻辑下统一的?
更新 2
我已将问题简化为更一般的形式:
scala - 这是scalac错误吗?
我认为此代码应抛出 ascalac 应该警告此代码。MatchError
而不是ClassCastException
. 或者
斯卡拉 2.11.5
编辑:
Scala 2.9.3 警告如下。但不是 2.10、2.11
我从一开始就理解类型擦除。
换句话说,pf.isDefinedAt(string)
返回 true 但pf.apply(string)
抛出ClassCastException
regex - Scala 正则表达式和部分函数
我想将 Scala 的 collect 函数与正则表达式一起使用。理想情况下,我只想收集那些与正则表达式匹配的术语。到目前为止,我已经实现了以下工作正常
不过,这似乎有一个额外的步骤。我首先检查正则表达式是否在收集的 case 语句中匹配,然后我检查它是否再次匹配以提取匹配的组。有没有办法只检查一次正则表达式匹配来做到这一点?
scala - 向偏函数添加新参数
是否有一些简单的方法可以向偏函数添加新参数,以便在与以前相同的域中定义结果函数(新参数对其偏性没有影响)?以下代码有效,但似乎有点冗长。
scala - Scala:使用 PartialFunction reify 调用 scala 宏时出现“缺少参数类型”
编译器向我抛出“缺少参数类型”。在解决了这个问题后,我意识到在链接部分函数时,您需要明确说明类型,否则编译器会抛出上述错误。现在,你们知道在宏的 reify 中链接部分函数时是否有任何问题?我想我不能更明确地了解部分函数类型:
这就是我调用宏实现的方式:
我也试过这个:
还是我从根本上误解了 reify 的工作原理?
scala - Scala:是否可以从 leftfold 获得部分应用的功能?
我目前正在学习 Scala,我只是想知道 fold-left。由于 fold-left 是柯里化的,因此您应该能够获得具有以下第一个参数的部分应用函数 (PAF)。
但实际上,我有一个错误。
然后我通过 fold-right 尝试了同样的事情,如下所示
这样,它就正确了,我可以得到一个 PAF,例如((Int, Int) => Int) => Int
我知道我可以通过使用 foldLeft 方法获得 PAF,但我想知道是否可以用 '/:' 表示它。
function - 如何将 PartialFunction 输入参数与输出混合
将函数输入参数与输出混合的最佳方法是什么。
这是我当前的代码:
有没有更好的办法 ?有更好的命名吗?
scala - 如何调用返回部分函数的函数重载的函数
如何使用以下函数之一打印“我不偏心” f
,为什么下面的代码正在打印“我偏心”?也许有一些与函数相关的一般规则(可能与 arity 0)在 scala 中产生部分函数和名称重载?