当前位置:  开发笔记 > 编程语言 > 正文

匹配数据而无需模式匹配

如何解决《匹配数据而无需模式匹配》经验,为你挑选了1个好方法。

如何在没有模式匹配的情况下检查变量是否属于某种数据类型?

data MyData = A | B | C char
            deriving (Eq)

-- This works.
isA :: MyData -> Bool
isA x = x == A

-- This generates a compile error.
isC :: MyData -> Bool
isC x = x == C

编辑:忘记添加deriving Eq.



1> K. A. Buhr..:

作为术语,您要检查变量是否与某个数据构造函数匹配,而不是类型.你所有的价值观都是类型的MyData; 你正在检查他们匹配的构造函数.

话虽如此,没有充分理由避免模式匹配.事实上,Haskell实现的正确惯用方法isA是:

isA A = True
isA _ = False

或者,如果您愿意:

isA x = case x of { A -> True; _ -> False }

同样,正确的实施方式isC是:

isC (C _) = True
isC _ = False

要么:

isC x = case x of { C _ -> True; _ -> False }

如果你试图避免模式匹配,因为你担心它在某种程度上比测试平等效率低,所以不要理会这个概念.它是确定值的构造函数的最有效方法.

如果你试图避免模式匹配,因为你不喜欢语法或对这种技术有某种个人厌恶,那么你有我的同情心:学习Haskell对你来说将是一个悲惨的经历.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有