You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:21