我学习Haskell.我的代码:
main = do
args <- getArgs
if length args < 2 then
putStrLn invalidCallingSignature
else
dispatch fileName command commandArgs
where (fileName : command : commandArgs) = args -- But I get an Exception: src3.hs:22:48: Not in scope: `args'
Run Code Online (Sandbox Code Playgroud)
我对最后一个代码行的异常感到困惑.为什么我明白了?
该where条款适用于整个函数,缩进会误导您.编译器看到的是:
main = do
args <- getArgs
if length args < 2 then
putStrLn invalidCallingSignature
else
dispatch fileName command commandArgs
where (fileName : command : commandArgs) = args
Run Code Online (Sandbox Code Playgroud)
所以args不可见.你想要一个记号let:
main = do
args <- getArgs
if length args < 2 then
putStrLn invalidCallingSignature
else do
let (fileName : command : commandArgs) = args
dispatch fileName command commandArgs
Run Code Online (Sandbox Code Playgroud)