使用getArgs时"用户错误"模式匹配失败

Xie*_*Xie 3 haskell

import Control.Concurrent (forkIO)
import System.Environment (getArgs)

main= do
    [a,b]<- getArgs
    putStrLn $ "command line arguments: " ++ show [a,b]
Run Code Online (Sandbox Code Playgroud)

当我编译它时,它没事,但是当我运行它时,
它说"用户错误(模式匹配失败的do表达式)",这里有什么问题?

bhe*_*ilr 7

问题是你[a, b]的返回值是模式匹配getArgs.如果使用2个参数以外的任何其他程序运行程序,则返回值将与模式不匹配[a, b].所以除非你运行这个程序

$ ./xie 1 2
command line arguments: ["1","2"]
Run Code Online (Sandbox Code Playgroud)

它会抛出一个错误.相反,如果你编写了代码

main = do
    args <- getArgs
    case args of
        [a, b] -> putStrLn $ "command line arguments: " ++ show [a, b]
        _      -> putStrLn "Invalid number of arguments"
Run Code Online (Sandbox Code Playgroud)

那么你永远不会在模式匹配上失败.