如何在Nim中运行runnableExamples代码块而非将其忽略?
Nim中runnableExamples代码块的运行配置指南
一、常规debug/release构建指什么?
就是你日常最常用的构建方式:比如直接用nim c(默认debug模式)、nim debug或者nim c -d:release这类命令编译代码,这种模式下编译器会自动忽略runnableExamples段内的代码,只编译主逻辑。
二、如何让runnableExamples代码不被忽略?
不需要依赖文档生成工具,直接通过编译选项就能控制,分两种场景:
1. 编译并运行所有runnableExamples代码
用--runExamples(短写-rE)参数搭配运行命令:
nim c -r --runExamples 你的模块文件名.nim
执行后,编译器会把模块主代码和所有runnableExamples里的代码一起编译,然后自动运行这些测试代码。
如果只想运行带特定标签的runnableExamples(比如示例里的"-d:foo -b:cpp"那段),可以指定标签:
nim c -r --runExamples:"-d:foo -b:cpp" 你的模块文件名.nim
2. 仅编译不运行runnableExamples代码
如果只想检查这些代码的语法、类型错误,不想实际执行,用--compileExamples(短写-cE)参数:
nim c --compileExamples 你的模块文件名.nim
另外,示例里的runnableExamples "-r:off"是特殊标记,这段代码只会被编译检查,就算你用了--runExamples也不会执行它。
三、示例代码中文注释解析
proc timesTwo*(x: int): int = ## 实现整数翻倍的过程 runnableExamples: # 模块作用域的测试代码 const exported* = 123 assert timesTwo(5) == 10 # 验证函数输出是否符合预期 block: # 代码块作用域的测试 defer: echo "done" # 代码块执行完毕后自动输出"done" runnableExamples "-d:foo -b:cpp": import std/compilesettings assert querySetting(backend) == "cpp" # 验证编译后端是C++ assert defined(foo) # 验证开启了foo编译开关 runnableExamples "-r:off": ## 这段仅编译不运行 import std/browsers openDefaultBrowser "https://forum.nim-lang.org/" 2 * x # 函数核心逻辑:返回输入值的两倍
内容的提问来源于stack exchange,提问作者DivergentSpaceTimeWanderer
相关产品推荐
相关产品推荐

