我试图了解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/

10-10 05:24