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