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