模块中未导出的函数别名

Unexported function aliases in module

提问人:Donald Seinen 提问时间:1/14/2023 更新时间:1/14/2023 访问量:35

问:

数十年的研究和软件导致了许多功能的同义词,用户可以期望在我的模块中“正常工作”。我想支持大约 80 个别名,但不能导出。例如,假设 , , , 作为 struct 的输入的别名。:bar:qux"bar""qux"Base.sqrtBar

:为模块中的函数创建未导出别名的推荐方法是什么?

我已经阅读了模块文档这个 SO 问题问题,并在 GitHub 上搜索了代码库。以下是我的尝试,速度更快,但与“避免命名空间中的全局变量”背道而驰。Bar2

# approach 1: add to namespace, but don't export
module Foo1
    struct Bar1 fun::Function end
    Bar1(fun::Union{Symbol, String}) = Bar1(getfield(@__MODULE__, Symbol(fun)))

    const baz = const qux = √ # ...

    export Bar1
end

# approach 2: package internal dictionary, not in namespace
module Foo2
    struct Bar2 fun::Function end
    Bar2(fun::Union{Symbol, String}) = Bar2(alias[Symbol(fun)])

    const alias = Base.ImmutableDict(:baz => √, :qux => √) #...

    export Bar2
end

using .Foo1, .Foo2

Bar1(:baz).fun == Bar1("qux").fun == Bar2(:baz).fun == Bar2("qux").fun # true
命名空间 Julia 元编程

评论


答: 暂无答案