Haskell实现类Unix cp命令报错:main: Prelude.!!: index too large
问题分析与解决
错误原因
Prelude.!!: index too large 这个错误表示列表索引超出范围——你的代码用 args !! 0 和 args !! 1 直接取命令行参数,但运行程序时你没传入足够的参数(比如只传了一个参数,或者完全没传),导致 args 列表长度不足2,触发了崩溃。
修复方案
直接用 !! 访问列表元素是不安全的,它不会处理列表长度不足的情况。我们可以通过模式匹配安全处理命令行参数,同时给用户提供清晰的错误提示:
修改后的代码:
import System.IO import System.Environment import qualified Data.Text as T import qualified Data.Text.IO as TI main :: IO () main = do args <- getArgs case args of -- 参数数量正确时执行复制逻辑 [source, dest] -> do input <- TI.readFile source TI.writeFile dest input -- 参数数量不对时提示用法 _ -> putStrLn "用法: mycp <源文件路径> <目标文件路径>"
运行注意事项
编译并运行程序时,必须传入两个参数,示例命令:
ghc -o mycp your_code.hs ./mycp 源文件.txt 目标文件.txt
内容的提问来源于stack exchange,提问作者anonymous1234
相关产品推荐
相关产品推荐

