我试图了解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
函数不是交互式的。如果提供了任何参数,它将仅返回从命令行提供的参数。关于haskell - getArgs如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49055999/