如何检查命令行参数的数量?
我有一个 Haskell 语言项目,但我对这项技术不是很熟悉。
我的程序必须采用 5 个命令行参数(包括二进制),它应该类似于以下行:
./my_program --a 30 --b 20
如何检查参数的数量(如果返回错误arguments != 5)?
我知道这个getargs功能,但我不知道如何使用它。
回答
这是一个如何使用的示例getArgs:
module Main where
import System.Environment (getArgs)
main :: IO ()
main = do
args <- getArgs
if length args == 5
then putStrLn "You gave me 5 args!"
else putStrLn "You didn't give me 5 args!"
编辑:是length args,不是args,谢谢。
编辑:但请注意,与 C 不同,getArgson ./my_program --a 30 --b 20will 不./my_program作为参数的一部分提及。如果你想要程序名称,它是getProgName. 否则,正确的数字可能是 4。为了使用 IO monad,您可以扩展程序以打印出可执行文件的名称:
import System.Environment (getArgs, ...)
main = IO ()
main = do
args <- getArgs
name <- ...
putStrLn ("Program: " <> show name)
if length args == 4
...
但是您似乎要进行的是参数解析,而不仅仅是计数。
您可以使用optparse-generic基于数据类型自动生成参数解析器。
文档中有一个例子Options.Generic,我在这里变成了一个模板项目,下面提到的重要部分供后代使用:
module Main where
import System.Environment (getArgs)
main :: IO ()
main = do
args <- getArgs
if length args == 5
then putStrLn "You gave me 5 args!"
else putStrLn "You didn't give me 5 args!"
如果将bleepsand替换bloops为aand b,则可以使用例如运行该程序
$ stack run -- --a 30 --b 20