2016-02-08 62 views
0

我正在嘗試:load文件「hello.hs」並不斷收到下面的錯誤。打印兩個參數

我正在使用WinGHCi 1.0.6。

我打印的只是一個參數,它的工作原理,但當我嘗試打印兩個參數時,我得到一個Not in scope錯誤,如下所示。

我的hello.hs代碼包含下面的代碼。

----------------- hello.hs --------------------

module Main where 
import System.Environment 
main :: IO () 
main = do 
     args <- getArgs --Getting first arg 
     putStrLn("Hello," ++args!!0) 
    do args1 <- getArgs putStrLn("Hello," ++args1!!1) --Getting second arg 

----------錯誤,同時試圖做的:加載命令--------

hello.hs:6:37: Not in scope: ‘args’ 

hello.hs:7:13: 
    The last statement in a 'do' block must be an expression 
     args1 <- getArgs putStrLn ("Hello," ++ args1 !! 1) 

hello.hs:7:50: 
    Not in scope: ‘args1’ 
    Perhaps you meant ‘args’ (line 5) 

回答

3

putStrLn命令在單獨一行。第二個do是沒有必要的(事實上,它是不必要的)。此外,您應該知道編譯器將硬標籤視爲填充到下一個八空間邊界;所以儘管這裏的東西看起來正確縮進了,但你的代碼混合了製表符和空格是不正確的。我建議在do塊的每行的開始處使用單個選項卡,或者將所有選項卡轉換爲空格。另見my diatribe on tab styles。所以:

main = do 
     args <- getArgs --Getting first arg 
     putStrLn("Hello," ++args!!0) 
     args1 <- getArgs 
     putStrLn("Hello," ++args1!!1) --Getting second arg 

這是使事情工作所需的最小改變。此外,因爲我看不出有任何理由相信該參數將在兩個電話之間切換到getArgs,你不妨省略了第二個電話,簡單地重用args

main = do 
     args <- getArgs 
     putStrLn("Hello," ++args!!0) 
     putStrLn("Hello," ++args!!1) 
+0

太感謝你了丹尼爾的時間和文章。 ...它終於在配置我的編輯器* Main>後運作:!hellome.exe坦率Erick 你好,frank 你好,Erick –