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表达式)",这里有什么问题?
问题是你[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)
那么你永远不会在模式匹配上失败.