所以我試圖匹配這種模式。 MessageType是我創建的一個類型。該函數接受一個字符串,然後根據該字符串的第一個字符輸出一個MessageType。每當我編譯不過,我得到一個警告說法:模式匹配是不具有說服力的 - 我的「其他方面」在最後一名後衛中未能處理空列表?
Pattern match(es) are non-exhaustive
In an equation for ‘parseMessage’: Patterns not matched: []
這裏是我的代碼:
parseMessage :: String -> MessageType
parseMessage (x:_)
| x == 'I' = Info
| x == 'W' = Warning
| otherwise = Error 1
它怎麼說,我的模式匹配並非詳盡無遺? otherwise
後衛不會抓住其他什麼嗎?我不明白我的函數不能捕捉所有的字符串。
當我寫這樣的功能,我沒有得到警告。
parseMessage [] = error "Empty String"
parseMessage (x:_) = if x == 'I'
then Info
else if x == 'W'
then Warning
else Error 1
我重寫了我的函數,因爲我看到警告說「模式不匹配:[]」,所以我明確地處理它。但爲什麼在我的函數的第一個版本中,它說這個模式沒有被處理。 otherwise
除了前兩名警衛之外怎麼也沒有抓到?
我想擺脫'otherwise'條款,並在末尾添加'parseMessage _ =錯誤1'。 – dfeuer
啊,我明白了。由於我設置了檢查列表的第一個元素的初始模式,空字符串不會被警衛抓住。 –