全自动化验证技巧programming-scala-book-code-examples 的 check-scripts.sh 与 check-mains.sh 脚本指南【免费下载链接】programming-scala-book-code-examplesThe code examples used in Programming Scala, 2nd and 3rd Editions (OReilly)项目地址: https://gitcode.com/gh_mirrors/pr/programming-scala-book-code-examples你是否想过一本几百页的编程书背后几百个代码示例是如何保证一个都不出错的这个项目的答案是两把自动化验证利器check-scripts.sh与check-mains.sh。本文为你拆解 programming-scala-book-code-examples《Programming Scala》第 2、3 版的官方代码仓库中的这套全自动化验证方案即使你完全不懂 Shell 脚本也能看懂它背后的设计智慧并学会把它迁移到自己的项目中。为什么代码示例需要半自动化验证书中的示例分为两类验证难度完全不同可编译源码位于src/main/scala由sbt test正常构建和测试REPL 脚本位于src/script/scala只适合在交互式控制台里逐行加载scalac根本编不过大量main入口虽然有 main 方法却不属于任何单元测试。更要命的是作者为了讲清楚错误长什么样故意在部分文件里埋了编译错误代码里常见// ERROR注释。普通测试框架遇到这些文件直接报红完全没法用。于是作者写下了这两个脚本用知道哪些文件该错的方式实现了代码示例自动化检查。check-scripts.shREPL 脚本的自动化验证方法check-scripts.sh位于仓库根目录专门对付src/script/scala下那些不能编译、只能解释的脚本。它的验证思路非常巧妙对每个.scala脚本文件启动sbt consoleScala REPL用:load 文件路径把脚本加载进解释器把整个会话输出保存到target/script-tests/下的同名.out文件用正则表达式在输出里搜索N errors found、N warnings found之类的关键行把有问题的文件汇总写入带时间戳的错误日志如target/script-tests/scripts-errors-2026-08-19_08-02-35.log。最贴心的是expected_errors_in白名单机制脚本内置了一张已知故意报错的文件清单比如src/script/scala/progscala3/patternmatching/MatchSurprise.scala这种演示不可达 case 分支的文件这些文件即使报错也被视为符合预期而放行但依然会记录在日志里提醒人工复核。这就是它被称为半自动化的原因——机器负责抓大错人负责看细节。check-mains.sh入口程序的一键批量运行验证如果说check-scripts.sh管脚本那check-mains.sh管的就是入口。它维护了一个def_mains清单列出了仓库里几十个 main 入口例如progscala3.introscala.UpperMain1、progscala3.contexts.json.TryJSONBuilder等。它的运行流程与前者镜像对称用sbt runMain 类名逐个执行输出保存到target/main-tests/错误写入mains-errors-时间戳.log。它还支持给特定 main 传参数——通过mains_args关联数组比如给性能测试InlinePerf传入true 10给CommandArgs传入--help实现了带参数的自动化运行验证。两个脚本的通用命令行选项这两个脚本的参数设计高度一致几乎可以无缝迁移到任何语言项目的验证流程中选项作用-h/--help打印完整帮助文档-v/--verbose边执行边打印每个文件的处理情况和完整输出-c/--clean先清空旧的target/script-tests或target/main-tests目录-n/--no-exec只打印将要执行的命令不真正运行演练模式--check不重新运行只基于已有输出文件检查错误默认情况下check-scripts.sh扫描整个src/script/scala目录check-mains.sh运行全部默认 main 清单你也可以把具体目录或类名作为参数传入做局部验证。配套的另外两把小工具除了两个主角仓库根目录还有两个辅助脚本值得了解check-head-comment.sh验证每个源码文件开头的路径注释是否与文件实际位置一致。书中代码用// src/main/scala/progscala3.introscala.UpperMain1这类注释标注出处一旦文件被移动而注释没改就会造成书里找不到代码的困惑这个脚本专治这种小毛病make-worksheets.sh把src/script/scala下的脚本复制到 worksheet 目录并把扩展名改为.worksheet.sc方便在 VSCode 等 IDE 里当工作表用。把这套自动化验证技巧迁移到你的项目这套方案最值得借鉴的不是代码而是三点设计思想白名单容忍预期失败教学类代码故意出错是常态与其让 CI 红灯不如明确哪些失败是被允许的并单独记录供人工复查输出留痕每次运行都生成带时间戳的输出文件和错误日志方便事后逐条核对而不是只给一个通过/失败的结论分而治之脚本文件用解释器加载验证main 方法用运行器验证头部注释单独抽一个脚本验证各司其职互不干扰。如果你想亲手体验这套全自动化验证流程可以克隆仓库后直接运行git clone https://gitcode.com/gh_mirrors/pr/programming-scala-book-code-examples然后进入仓库根目录执行./check-scripts.sh -n演练模式先看看它会做什么再正式运行./check-scripts.sh和./check-mains.sh。注意作者在 README 中提醒两个脚本都比较耗时且最终输出仍建议人工抽查——毕竟机器保证不犯低级错误人保证结果真的正确这才是代码示例质量检查的最佳组合。【免费下载链接】programming-scala-book-code-examplesThe code examples used in Programming Scala, 2nd and 3rd Editions (OReilly)项目地址: https://gitcode.com/gh_mirrors/pr/programming-scala-book-code-examples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考