为什么 Julia Documenter 需要在 doc-tests 中限定函数?

Why does Julia Documenter require qualifying functions in doc-tests?

我在 Julia 中的文档测试需要对模块名称进行限定,尽管到处都调用 using my_module。如果我不合格的功能,我得到

ERROR: UndefVarError: add not defined

这是出现此错误的设置。 tree的目录结构是:

.
|____docs
| |____make.jl
| |____src
| | |____index.md
|____src
| |____my_module.jl

文件docs/make.jl是:

using Documenter, my_module

makedocs(
    modules = [my_module],
    format = :html,
    sitename = "my_module.jl",
    doctest = true
)

文件docs/src/index.md是:

# Documentation

```@meta
CurrentModule = my_module
DocTestSetup = quote
    using my_module
end
```

```@autodocs
Modules = [my_module]
```

文件src/my_module.jl是:

module my_module

"""
    add(x, y)

Dummy function

# Examples
```jldoctest
julia> add(1, 2)
3
```
"""
function add(x::Number, y::Number)
    return x + y
end

end

如果我在 src/my_module.jl 中使用 my_module.add(1,2) 限定文档测试,那么它工作正常。

如何避免在 doc-tests 中限定函数名称?

使用 setup name block

这是未经测试的,但像这样的东西应该可以工作:

module my_module

"""
    add(x, y)

Dummy function

# Examples
```@setup abc
import my_module: add
```

```jldoctest abc
julia> add(1, 2)
3
```
"""
function add(x::Number, y::Number)
    return x + y
end

end

根据中的注释,问题是add函数没有被导出,所以它没有被纳入using的范围。您可以在 src/my_module.jl 的顶部附近添加此行,在模块声明之后:

export add

然后文档测试工作。