- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样一个受歧视的工会:
type A = |B | C of int*A
我必须像这样进行模式匹配(括号似乎是必需的):
match x with
| B -> printfn "B"
| C (i,a) -> printfn "%A, %A" i a
有没有办法用像这样的事件模式来代替这样的匹配:
match x with
| B -> printfn "B"
| C i a -> printfn "%A, %A" i a
如果不是,为什么 F# 设计成这种与柯里化(Currying)参数的匹配不起作用,而是强制您使用元组?
编辑:这是受 F# 列表的启发,您可以在其中使用 h::t
而无需任何元组或类似的东西。源代码如下:
type List<'T> =
| ([]) : 'T list
| (::) : Head: 'T * Tail: 'T list -> 'T list
最佳答案
我认为检查柯里化(Currying)函数和事件模式的定义会让您明白这一点。
柯里化(Currying)函数:一个函数,它接受多个参数,但允许您一次传递一个参数,以便返回一个函数,它做同样的事情,但接受的参数少一个。示例:
let add a b = a + b
//val add : a:int -> b:int -> int
let add5 = add 5
//val add5 : (int -> int)
事件模式:一种应用模式匹配的方法,可以使用解析或其他复杂逻辑来完成匹配。接受一个参数并返回解析结果。所以输入->单一返回参数。
//Example taken from https://fsharpforfunandprofit.com/posts/convenience-active-patterns/
let (|Int|_|) str =
match System.Int32.TryParse(str) with
| (true,int) -> Some(int)
| _ -> None
val ( |Int|_| ) : str:string -> int option
由于柯里化(Currying)函数的全部意义在于能够部分应用函数,因此当应用于事件模式的结果时,这个概念根本没有意义。
换句话说,事件模式的结果不能“柯里化(Currying)”,因为您只能柯里化(Currying)函数,而事件模式的结果是不是函数的数据。在您的示例中,“C (i,a)”定义了 Active Pattern 案例的返回类型,而不是函数调用。
关于f# - 受歧视工会中的 curry 争论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169500/
我有这样一个受歧视的工会: type A = |B | C of int*A 我必须像这样进行模式匹配(括号似乎是必需的): match x with | B -> printfn "B" | C (
panic!(arg) 发出后如何收集 arg? This文档不明确。 当执行 panic!(42) 时,我希望我的应用程序收集 42 并优雅地失败,而不仅仅是中止。 最佳答案 为了收集论点,向下转换
所以,我已经使用 HP 媒体中心一段时间了,只有大约 4 GB 的 RAM,所以,当然,我运行的是 32 位 Windows 7。我一直尝试运行一个使用java虚拟机,我可以使用jvm争论它,但是,我
我有以下 IDL 接口(interface): interface ItemA : Item { void actionA(in float a, out long b); }; 在
hamcrest库中有一个方法: package org.hamcrest.core ... public static Matcher allOf(Matcher first, Matcher s
我有一个格式为 numpy.timedelta(64) 的时间增量:value = numpy.timedelta64(30,'m') (此处为 30 分钟)。 有没有办法将该值传递给 pandas
我是一名优秀的程序员,十分优秀!