我在努力理解 getArgs 在哈斯克尔。以下是我所拥有的:
getArgs
import System.Environment myFunFunction = do args <- getArgs return $ head args
运行该函数时得到的结果是
*Main> myFunFunction *** Exception: Prelude.head: empty list
这与 getLine ? 为什么它不要求命令行参数?
getLine
的类型 getArgs 是 IO [String] . 当你用 <- ,如OP中所示,绑定符号( args )获取类型 [String] ,即字符串列表。
IO [String]
<-
args
[String]
这个 head 函数返回列表中的第一个元素;它具有以下类型 [a] -> a . 它以不安全著称,因为如果将其应用于空列表,它将崩溃:
head
[a] -> a
Prelude System.Environment> head [] *** Exception: Prelude.head: empty list
这就是这里发生的事情。 getArgs公司 提供运行程序时在命令行提供的参数。如果在命令行中没有提供任何参数,那么返回的列表将为空。
getArgs公司
这个 getArgs公司 函数不是交互式的。它只会返回命令行提供的参数(如果有)。