7

我使用了库标准和 cmdargs。

当我在没有 cmdargs 的情况下完全编译程序并运行它时,例如 ./prog --help 然后我从标准中得到一些关于可能选项和运行次数等的不需要的响应。

当我如下编译并运行它时,命令行选项首先由我的代码拾取,然后按标准读取。然后,Criterion 报告并错误告诉我选项 --byte 是未知的。我在标准文档中没有看到如何关闭或解决此问题。有没有办法清除我读过的命令行选项?否则,我将需要使用例如 CPUTime 而不是标准,这对我来说是可以的,因为我确实需要标准提供的额外功能和数据的负载。

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}

import System.Console.CmdArgs

data Strlen = Strlen {byte :: Int} deriving (Data, Typeable, Show)

strlen = cmdArgsMode $ Strlen {byte = def} &= summary "MessagePack benchmark v0.04"

main = do
  n <- cmdArgsRun strlen
  let datastring = take (byte n) $ randomRs ('a','z') (mkStdGen 3)
  putStrLn "Starting..."
  conn <- connect "192.168.35.62" 8081
  defaultMain [bench "sendReceive" $ whnfIO (mywl conn datastring)] 
4

2 回答 2

11

使用System.Environment.withArgs. 首先用 解析命令行参数cmdArgs,然后传递你不习惯的内容criterion

main = do
    (flags, remaining) <- parseArgsHowever
    act according to flags
    withArgs remaining $
        defaultMain [ ... ]
于 2011-12-08T17:27:31.663 回答
3

看看标准来源。您应该能够编写自己的defaultMainWith函数来处理您想要的 args,包括忽略它们,或忽略未知的 args,等等......

于 2011-12-08T17:28:31.790 回答