代码之家  ›  专栏  ›  技术社区  ›  JamalCrawford..

getArgs是如何工作的?

  •  3
  • JamalCrawford..  · 技术社区  · 6 年前

    我在努力理解 getArgs 在哈斯克尔。以下是我所拥有的:

    import System.Environment
    
    myFunFunction = do
         args <- getArgs
         return $ head args
    

    运行该函数时得到的结果是

     *Main> myFunFunction
     *** Exception: Prelude.head: empty list
    

    这与 getLine ? 为什么它不要求命令行参数?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Mark Seemann    6 年前

    的类型 getArgs IO [String] . 当你用 <- ,如OP中所示,绑定符号( args )获取类型 [String] ,即字符串列表。

    这个 head 函数返回列表中的第一个元素;它具有以下类型 [a] -> a . 它以不安全著称,因为如果将其应用于空列表,它将崩溃:

    Prelude System.Environment> head []
    *** Exception: Prelude.head: empty list
    

    这就是这里发生的事情。 getArgs公司 提供运行程序时在命令行提供的参数。如果在命令行中没有提供任何参数,那么返回的列表将为空。

    这个 getArgs公司 函数不是交互式的。它只会返回命令行提供的参数(如果有)。