提问人:Donald Seinen 提问时间:1/14/2023 更新时间:1/14/2023 访问量:35
模块中未导出的函数别名
Unexported function aliases in module
问:
数十年的研究和软件导致了许多功能的同义词,用户可以期望在我的模块中“正常工作”。我想支持大约 80 个别名,但不能导出。例如,假设 , , , 作为 struct 的输入的别名。:bar
:qux
"bar"
"qux"
Base.sqrt
Bar
问:为模块中的函数创建未导出别名的推荐方法是什么?
我已经阅读了模块文档和这个 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
答: 暂无答案
评论