And*_*man 4 haskell pattern-matching
Haskell,Stack构建工具.
我有代码:
quote :: Char
quote = '\''
doubleQuote :: Char
doubleQuote = '\"'
isBorder :: Char -> Bool
isBorder quote = True
isBorder doubleQuote = True
isBorder _ = False
Run Code Online (Sandbox Code Playgroud)
它将在没有错误的情况下编译,但我在编译期间看到了消息:
D:\ haskell\real\app\Main.hs:34:1:警告:[-Woverlapping-patterns]
模式匹配是多余的
在`isBorder'的等式中:isBorder doubleQuote = ...D:\ haskell\real\app\Main.hs:35:1:警告:[-Woverlapping-patterns]
模式匹配是多余的
在`isBorder'的等式中:isBorder _ = ...
这是什么意思?我没有看到冗余......
hao*_*hao 10
声明函数时,参数变量是新名称.你的引用和doubleQuote是阴影函数,而不是调用模式匹配的函数.通过这种方式,模式匹配的语言巧妙地偏离了右手边表达的语言.为了实现你想要的,要么做到
isBorder :: Char -> Bool
isBorder '\'' = True
isBorder '\"' = True
isBorder _ = False
Run Code Online (Sandbox Code Playgroud)
要么
isBorder :: Char -> Bool
isBorder c | quote == c = True
isBorder c | doubleQuote == c = True
isBorder _ = False
Run Code Online (Sandbox Code Playgroud)
理念是首先将参数绑定到name,然后使用guard来调用一个计算结果为布尔值的表达式.
| 归档时间: |
|
| 查看次数: |
5239 次 |
| 最近记录: |