如何检查命令行参数的数量?

我有一个 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替换bloopsaand b,则可以使用例如运行该程序

$ stack run -- --a 30 --b 20


以上是如何检查命令行参数的数量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>