我正在为 Rebol 3 (posix/fann/math) 做一些扩展。
为了避免全局命名空间污染,我使用简单的前缀源标识符导出函数。例如:POSIX-FORK
forfork
或POSIX-NANOSLEEP
for nanosleep。
有没有更好的方法或官方 Rebol 命名约定?
这是 Rebol 导出的非常标准的命名约定,尽管它们在代码中当然应该是小写的。当指代聊天客户端或网站中无法显示类似this
. 您通常不会在 Rebol 代码中将任何单词大写,除非它们用于其他用途。
但是,如果您想避免全局命名空间污染,请使用options: [private]
标头声明您的扩展模块。这将使您的模块的导出仅由模块或脚本导入,这些模块或脚本使用import
或needs
标头显式请求它们。这尤其适用于导出低级 C 类 API 的模块或扩展,这些 API 最好仅由实现高级包装器的模块导入。最好记住扩展的模块部分是一个完整的 Rebol 模块,通常最好将高级包装代码放在那里,根本不导出类 C 函数,让它们供内部使用。
另一个技巧是,当您导出常量或枚举值时,最好将它们放在模块中的一个对象中,然后导出该对象。这样您就不会导出到全局命名空间,并且可以保护单词不被修改。
另一个技巧是根本不导出东西并让人们使用该import
函数导入您的模块。除非您将模块的单词标记为隐藏,否则即使它们没有导出,它们仍然可用。不过在大多数情况下这有点不方便,所以最好使用私有模块。您还可以导出您的高级 API 而不是导出您的低级 API,因此如果有人想使用低级 API,则可以导入它。
在这里查看有关如何使用模块和扩展的更全面的答案:Rebol 模块中的单词是如何绑定的?