簡體   English   中英

WxHaskell破壞了命令行參數功能

[英]WxHaskell breaks command line arg functionality

我已經用WXHaskell編寫了一個程序,並驗證了該程序是否有效。 長話短說,我計划通過GUI或命令行界面使用該程序。 后來我繼續使用GetOpts庫添加命令行參數處理,並開始測試各種參數是否按預期工作。

但是,一旦我開始使用命令行選項運行該程序,該程序便開始失敗:每當在GUI模式下調用該程序(即運行WXHaskell)時,該程序便會崩潰,並發出有關無法識別的命令行選項的警告(此警告的形式為WXwidgets彈出窗口)。 每當程序在終端模式下運行時,所有選項都得到正確處理,因此我懷疑運行WX計算會導致“ ARGV”值向下傳遞給某些WX函數,當然,因為這些args是為在主程序主體中,它們將無法識別。

我編寫了一個小的測試用例,它再現了這種行為(沒有GetOpts)。

import Graphics.UI.WX
import System.Environment (getArgs)

gui = do
  fr <- frame [text := "GUI calculation"]
  t <- staticText fr [text := "Enter a number below"]
  n <- entry fr []
  let foo = do
        v <- read <$> get n text
        set t [text := "Your number * 3 is " ++ show (v * 3 :: Int) ]
  b <- button fr [text := "Calculate", on command := foo]
  set fr [layout := column 3 [widget t, widget n, widget b] ]

terminal = do
  putStrLn "Enter a number"
  v <- read <$> getLine
  putStrLn $ "Your number * 3 is " ++ (show $ v * 3)

main = do
  a <- getArgs
  case a of
    ("terminal"):_ -> terminal
    ("gui"):_ -> start gui
    _ -> start gui

處理命令行args,然后在終端上或通過gui運行計算(將用戶指定的Int乘以3)。

如果用戶指定“終端”,則程序可以順利完成。 如果用戶未指定參數,則默認情況下,計算將在gui模式下運行,並且也將正常完成。

如果用戶指定“ gui”參數,則程序會因錯誤(在彈出窗口中)而崩潰:“意外參數'gui'”。

如果有人知道為什么我的args顯然會傳遞給后續操作,或者更好的是,如何阻止這種情況發生,我將非常高興!

我遇到了同樣的問題。 我的解決方法是使用withArgs來啟動GUI,而無需任何命令行參數,例如:

main = do
  a <- getArgs
  case a of
    ("terminal"):_ -> terminal
    ("gui"):_ -> withArgs [] (start gui)
    _ -> withArgs [] (start gui)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM