[英]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.