问题标签 [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 投票
1 回答
69 浏览

scala - 是否可以从函数体中取消当前的部分函数?

我需要定义一些部分函数来处理具有不同模式的不同 url(使用 unfinagled):

你可以看到我最终将一些部分功能组合成一个完整的路线。最后一个是NotFound处理不匹配的url,所以我不想关心早期路由中的不匹配情况(比如,assertRoutes)。

但是在该assetsRoutes方法中,我无法轻松检查资产是否存在于case零件中,因为我只想为资产触摸一次文件系统。所以我不想写:

虽然我可以编写unapply如下自定义:

case AssetExistWithContent(content)但我认为在匹配 url 或请求时看不到部分。

所以我想知道是否可以取消函数体中的当前部分函数?所以我可以写:

在这个方法中我不需要关心什么时候做(NotFound 或其他事情),只要告诉调用者我无法处理它,请尝试下一个。

0 投票
3 回答
9620 浏览

scala - orElse 如何在 PartialFunctions 上工作

orElse使用定义的方法,我得到了非常奇怪的行为(至少在我看来)PartialFunction

在我看来:

有道理,但这不是它的行为方式,我很难理解为什么类型签名似乎表明了我在上面公开的内容。

以下是我在 Scala 2.11.2 中观察到的记录:

注意它的返回类型val b并没有扩大PartialFunction的类型。

但这也不能按预期工作:

0 投票
4 回答
477 浏览

scala - PartialFunction orElse 的类型界限是否比应有的宽松?

让我们定义一个PartialFunction[String, String]和一个PartialFunction[Any, String]

现在,给定orElse

我希望不能组成这两个,因为

AString
A1Any

因此界限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,因为

所以这就是为什么混合StringAny结果成String.

话虽如此,引擎盖下发生了什么?不匹配的类型是在什么逻辑下统一的?

更新 2

我已将问题简化为更一般的形式:

0 投票
2 回答
836 浏览

scala - 这是scalac错误吗?

我认为此代码应抛出 aMatchError而不是ClassCastException. 或者scalac 应该警告此代码。

斯卡拉 2.11.5

编辑:

Scala 2.9.3 警告如下。但不是 2.10、2.11

我从一开始就理解类型擦除。

换句话说,pf.isDefinedAt(string)返回 true 但pf.apply(string)抛出ClassCastException

0 投票
2 回答
579 浏览

regex - Scala 正则表达式和部分函数

我想将 Scala 的 collect 函数与正则表达式一起使用。理想情况下,我只想收集那些与正则表达式匹配的术语。到目前为止,我已经实现了以下工作正常

不过,这似乎有一个额外的步骤。我首先检查正则表达式是否在收集的 case 语句中匹配,然后我检查它是否再次匹配以提取匹配的组。有没有办法只检查一次正则表达式匹配来做到这一点?

0 投票
1 回答
88 浏览

scala - 向偏函数添加新参数

是否有一些简单的方法可以向偏函数添加新参数,以便在与以前相同的域中定义结果函数(新参数对其偏性没有影响)?以下代码有效,但似乎有点冗长。

0 投票
1 回答
120 浏览

scala - Scala:使用 PartialFunction reify 调用 scala 宏时出现“缺少参数类型”

编译器向我抛出“缺少参数类型”。在解决了这个问题后,我意识到在链接部分函数时,您需要明确说明类型,否则编译器会抛出上述错误。现在,你们知道在宏的 reify 中链接部分函数时是否有任何问题?我想我不能更明确地了解部分函数类型:

这就是我调用宏实现的方式:

我也试过这个:

还是我从根本上误解了 reify 的工作原理?

0 投票
2 回答
552 浏览

scala - Scala:是否可以从 leftfold 获得部分应用的功能?

我目前正在学习 Scala,我只是想知道 fold-left。由于 fold-left 是柯里化的,因此您应该能够获得具有以下第一个参数的部分应用函数 (PAF)。

但实际上,我有一个错误。

然后我通过 fold-right 尝试了同样的事情,如下所示

这样,它就正确了,我可以得到一个 PAF,例如((Int, Int) => Int) => Int

我知道我可以通过使用 foldLeft 方法获得 PAF,但我想知道是否可以用 '/:' 表示它。

0 投票
1 回答
51 浏览

function - 如何将 PartialFunction 输入参数与输出混合

将函数输入参数与输出混合的最佳方法是什么。

这是我当前的代码:

有没有更好的办法 ?有更好的命名吗?

0 投票
1 回答
261 浏览

scala - 如何调用返回部分函数的函数重载的函数

如何使用以下函数之一打印“我不偏心” f,为什么下面的代码正在打印“我偏心”?也许有一些与函数相关的一般规则(可能与 arity 0)在 scala 中产生部分函数和名称重载?