问题标签 [active-pattern]

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 回答
464 浏览

f# - F#将活动模式匹配为扩展元组

我在 diff 中收到以下错误,在 Subset 下带有红色波浪线。
Type mismatch. Expecting a Range -> Choice but given a Range * Range -> Choice

是否可以将某种类型的注释添加到子集匹配中,这样我就不必使用 fst 和 snd?如果没有,是否有意支持这种语法?

0 投票
3 回答
534 浏览

f# - F# 活动模式作为非静态成员

我不确定是否允许非静态公共成员活动模式,但您可以在编译器不抱怨的情况下定义它们。如果他们被允许,匹配一个的语法是什么?编译器给了我 FooBar2.doSomething 中 Foo 的类型不匹配。期待一个'a -> Choice<'b,'c>给定的'a -> 'd -> Choice<unit,unit>

0 投票
2 回答
1404 浏览

list - F# Active Pattern List.filter 或等效的

我有类型的记录

显然,tradeLegs 是一种交易类型。一条腿可能已结算或未结算(或未结算但价格已确认) - 因此我定义了活动模式:

然后确定交易是否已结算(基于所有匹配 LegIsSettled 模式的边:

我可以看到这种使用活动模式的一些优点,但是我认为有一种更有效的方法可以查看列表中的任何项目是否匹配(或不匹配)活动模式,而无需专门为它,并使用 List.exist。

问题有两个:

  1. 有没有更简洁的方式来表达这一点?
  2. 有没有办法抽象功能/表达式

    /li>

这样

这样我可以写(因为我正在重用这个设计模式):

想法?

0 投票
1 回答
611 浏览

f# - 重载 F# 活动模式

我对 F# 和活动模式还很陌生,我遇到了一个我无法解释的异常情况。

这不编译。通过一个小的调整,我可以让它按预期工作,但我不知道到底发生了什么让我有点紧张......第二种模式可以重命名为“(|NoBet|Bet1|Pass1| )" 并且它的关联模式在整个代码中都发生了变化,然后它就可以工作了,但我真的不明白为什么会有类型不匹配异常。

还有一种处理几乎相同但不完全相同的 2 个活动模式的好方法吗?似乎应该有一种方法可以将常见的东西放在一起。(作为旁注,看起来缩进在复制/粘贴中搞砸了,这完全是模块 Eval 的一部分)。

0 投票
2 回答
238 浏览

f# - 当某些东西不是特定类型时如何进行模式匹配

我们都习惯于对某些特定类型的情况进行模式匹配,例如

但是,当某些东西不是特定类型时,我该如何匹配呢?例如,

谢谢!

0 投票
1 回答
678 浏览

xml - 使用 F# 反序列化 Xml

我从要转换为 .net 对象的 Web 服务中获取以下 xml:

这是我到目前为止所拥有的:

正如您所看到的,某些元素在不同的元素中重复,有时元素不包括可以显示的所有元素,如您在我的示例 xml 中看到的那样。这个相同的 Web 服务还将在其他类型的响应中重用许多相同的元素。是否可以使用活动模式来创建一种通用方法来反序列化我返回到对象的 xml?看起来这个 Web 服务从不使用属性来发送信息,它似乎都是元素中的元素,这可能会使这个问题变得更容易。如果我以错误的方式解决这个问题,请随时提出更好的建议。

提前致谢,

鲍勃

0 投票
1 回答
15828 浏览

regex - F# 映射正则表达式与活动模式匹配

我发现这篇关于使用正则表达式的活动模式的有用文章:http: //www.markhneedham.com/blog/2009/05/10/f-regular-expressionsactive-patterns/

文章中使用的原始代码片段是这样的:

这会让您知道是否找到了至少一个 url 以及该 url 是什么(如果我正确理解了该片段)

然后在评论部分乔尔提出了这个修改:

另一种选择,因为给定的组可能是也可能不是成功的匹配:

或者,也许您为您的组提供标签,并且您想按名称访问它们:

在尝试结合所有这些之后,我想出了以下代码:

当我在交互式会话中运行代码时,输​​出如下:

我试图达到的结果看起来像这样:

基本上是找到的每个唯一匹配的映射,然后是在文本中找到特定匹配字符串的次数的计数。

如果您认为我在这里走错了路,请随时提出完全不同的方法。我对活动模式和正则表达式都有点陌生,所以我什至不知道从哪里开始尝试解决这个问题。

我也想出了这个,这基本上就是我在 C# 中翻译成 F# 时所做的。

运行时返回:

这基本上是我正在寻找的结果,但我正在尝试学习执行此操作的功能方式,我认为这应该包括活动模式。如果它比我的第一次尝试更有意义,请随意尝试“功能化”它。

提前致谢,

鲍勃

0 投票
1 回答
449 浏览

f# - 如何将复杂表达式传递给参数化的活动模式?

我将活动模式“表达式”定义如下:

现在我正在尝试以这种方式使用它:

但这会导致“错误 FS0010:模式中出现意外符号 '-'”。那可以修吗?

我想要做的是清楚地写出以下方程的解:

max(wl - cw * .25, 0) + max(wr - cw * .25) + cw * columnCount = ActualWidth

其中 cw 是唯一的变量。

你能提出更好的方法吗?

0 投票
2 回答
1229 浏览

f# - 在活动模式中使用 typeof<_>

给定以下人为的主动模式:

以下:

给出错误:

模式匹配中的意外类型应用。应为“->”或其他标记。

但这有效:

为什么typedefof(或typeof)不允许在这里?

0 投票
2 回答
1292 浏览

f# - 活动模式和成员约束

对于内联函数,可以创建如下约束:

要求参数上的给定运算符或成员。有没有办法根据类似的东西进行匹配?

我想创建一个活动模式,其中传递给与内联函数的约束匹配的方法的任何参数都将触发该函数,并且其他所有内容都作为某些错误管理的一部分而结束。