为什么使用我的活动模式对元组进行模式匹配不起作用?

红咖喱

以下是我定义的活动模式以及尝试进行模式匹配的函数:

let (|Left|)     i = i = 0
let (|Top|)      j = j = 0
let (|Right|)  w i = i = w - 1
let (|Bottom|) h j = j = h - 1

let test w h (i, j) =
    match i, j with
    | (Left   , Top     ) -> 1
    | (Left   , Bottom h) -> 2
    | (Right w, Top     ) -> 3
    | (Right w, Bottom h) -> 4
    | (_      , _       ) -> 5

我预计匹配,例如,(0, 0)(Left, Top)(99, 99)使用(Right 100, Bottom 100)相反,它甚至没有编译(错误之一是“FS0001:该表达式的类型应该为‘bool’,但这里的类型为‘unit’”)。

布赖恩伯恩斯

为此,您需要部分活动模式

let (|Left|_|)     i = if i = 0 then Some Left else None
let (|Top|_|)      j = if j = 0 then Some Top else None
let (|Right|_|)  w i = if i = w - 1 then Some Right else None
let (|Bottom|_|) h j = if j = h - 1 then Some Bottom else None

let test w h (i, j) =
    match i, j with
    | (Left   , Top     ) -> 1
    | (Left   , Bottom h) -> 2
    | (Right w, Top     ) -> 3
    | (Right w, Bottom h) -> 4
    | (_      , _       ) -> 5

test 100 100 (0, 0)   |> printfn "%A"   // (Left, Top)     -> 1
test 100 100 (99, 99) |> printfn "%A"   // (Right, Bottom) -> 4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

物化活动选项卡在模式中不起作用

为什么不能使用模式匹配从Either投影中提取一个元组进行理解?

sed模式匹配不起作用

为什么fmap对元组不起作用?

解构元组以进行模式匹配

为什么在取消引用非元组时,对被取消引用的引用元组的匹配不起作用?

为什么我的有效正则表达式模式在R中不起作用

为什么使用setInterval()进行反向for循环不起作用?

当对结果进行过滤以匹配我的日期格式(Oracle SQL)时,为什么to_date不起作用

模式匹配不起作用

Java-为什么这种模式匹配不起作用?

为什么此引导程序模式不起作用?

策略模式不起作用:我做错了什么?

Scala模式匹配与析取不起作用

为什么我的启动活动不起作用?

为什么“停止”模式在我的sed命令中不起作用?

当我尝试引用其他模式的对象时,为什么猫鼬引用对我不起作用?

为什么我的“基金会遵守”模式不起作用?

Java模式匹配不起作用

我的MVVM模式不起作用...为什么?

为什么使用Rackunit进行的此测试不起作用?

我的 SaveCommand 按钮在 UWP 中不起作用,为什么?我使用 MVVM 模式

^ 的 zsh grep 模式匹配不起作用

为什么 AIML 模式匹配不起作用?

为什么我的 Unicode 中的 RegEx 模式不起作用?

为什么在 Mongoose 模式中声明的方法不起作用

为什么这个 Bash 通配模式不起作用?

为什么匹配模式中的嵌套递归调用不起作用?

为什么我的活动转换不起作用?