getArgs如何工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getArgs如何工作?相关的知识,希望对你有一定的参考价值。

我想了解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功能不是交互式的。它只返回从命令行提供的参数,如果有的话。

以上是关于getArgs如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]

getarg 命令行输入参数

使用getArgs的输入参数不返回任何内容

为什么在fmap方法参数后评估getArgs?

创建自己的代码片段(CodeSnippet)

如何将此 JavaScript 代码片段翻译成 Parenscript?