我正在尝试理解Haskell中的getArgs
函数。以下是我的理解:
import System.Environment
myFunFunction = do
args <- getArgs
return $ head args
当我运行该函数时,所得到的结果是:
*Main> myFunFunction
*** Exception: Prelude.head: empty list
这与
getLine
不同吗?为什么不要求命令行参数?getArgs
的类型是 IO [String]
。 在 OP 中使用 <-
绑定它时,绑定的符号(args
)的类型为 [String]
,即字符串列表。
head
函数返回列表中的第一个元素; 它的类型是 [a] -> a
。它因不安全而臭名昭著,如果将其应用于空列表,则会崩溃:Prelude System.Environment> head []
*** Exception: Prelude.head: empty list
getArgs
函数返回。如果你在命令行中没有提供任何参数,则返回的列表将为空。
getArgs
函数不是交互式的。它只会返回从命令行提供的参数,如果有的话。main
不会以任何特殊方式设置参数列表,但是:main foo bar baz
会这样做。 - Daniel Wagner
prog arg1 arg2 ...
。 - LeegetArgs
返回程序命令行参数的列表(不包括程序名称)。 - freestylewithArgs ["test"] myFunFunction
。 - 4castle