使用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的输入参数不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023