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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用getArgs的输入参数不返回任何内容相关的知识,希望对你有一定的参考价值。

我试图理解getArgs,但我得到一个奇怪的行为,我不理解。这是我的计划:

getMyArgs :: IO [String]
getMyArgs =do
         x <- getArgs
         return x

我运行这个并得到:

*Main> hello <- getMyArgs
*Main> 

为什么不通过我的论点?我试图放入一个“show()”但是把它变成一个String而不是一个[String]

答案
getMyArgs :: IO [String]
getMyArgs =do
         x <- getArgs
         return x

做符号desugars:

getMyArgs :: IO [String]
getMyArgs =  getArgs >>= x -> return x

使用正确的标识我们可以将其重写为:

getMyArgs :: IO [String]
getMyArgs =  getArgs

所以你刚刚为getArgs定义了一个新名字。现在为什么getArgs不显示你的程序参数?好吧,看来你没有提供任何程序参数。在解释器中提供参数可能很棘手 - 一种方法是:set它们:

Prelude> :set args hello world
Prelude> import System.Environment
Prelude System.Environment> getArgs
["hello","world"]

编辑:哦,你可能正在寻找打印你绑定的价值。考虑:

Prelude System.Environment> hello <- getArgs
Prelude System.Environment> print hello
["hello","world"]

感谢@ 4castle的观察。

另一答案

假设您的Haskell程序被编译为可执行文件foo。当您调用程序时,您希望将一些运行时参数传递给您的程序,例如foo param1 param2。根据param1和param2的值,您将在程序中执行不同的操作。

现在使用getArgs函数,您可以在Haskell程序中访问这些参数。

在GHCi中,可以模拟这种参数传递。使用:set args paarm1 param2命令,如Thomas M. DuBuisson的答案所示 或者您使用:main param1 param2在GHCI中调用您的主程序。

在两种情况下,getEnv都将返回IO ["param1", "param2"]

以上是关于使用getArgs的输入参数不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

滑动到下一个片段并返回后的片段不显示任何内容

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

getArgs如何工作?

片段(Java) | 机试题+算法思路+考点+代码解析 2023

带有嵌套参数的 Alamofire POST 请求不返回任何内容

201555332盛照宗—网络对抗实验1—逆向与bof基础