getArgs如何工作?

Jam*_*d.. 2 io haskell arguments

我想getArgs在Haskell中了解。这是我所拥有的:

import System.Environment

myFunFunction = do
     args <- getArgs
     return $ head args
Run Code Online (Sandbox Code Playgroud)

运行该函数时得到的是

 *Main> myFunFunction
 *** Exception: Prelude.head: empty list
Run Code Online (Sandbox Code Playgroud)

这是否与以下方式不同getLine?为什么不要求命令行参数?

Mar*_*ann 5

的类型getArgsIO [String]。当与<-OP 绑定时,如在OP中一样,绑定的符号(args)获得类型[String],即字符串列表。

head函数返回列表中的第一个元素;它具有类型[a] -> a。它因不安全而闻名,从某种意义上讲,如果将其应用于空列表,它将崩溃:

Prelude System.Environment> head []
*** Exception: Prelude.head: empty list
Run Code Online (Sandbox Code Playgroud)

这就是这里发生的事情。getArgs为您提供您在运行程序时在命令行中提供的参数。如果您在命令行中未提供任何参数,则返回的列表将为空。

getArgs功能不是交互式的。如果提供了任何参数,它将仅返回从命令行提供的参数。

  • 也可能感兴趣:在ghci中测试内容时,仅运行`main`不会以任何特殊方式设置参数列表,但`:main foo bar baz`会设置。 (10认同)