Rebol,扩展和功能命名

时间:2013-04-02 19:46:08

标签: rebol

我正在研究Rebol 3的一些扩展(posix / fann / math)。

为了避免全局命名空间污染,我使用简单的前缀源标识符导出函数。例如:forkPOSIX-FORKnanosleepPOSIX-NANOSLEEP

有没有更好的方法或官方的Rebol命名约定?

1 个答案:

答案 0 :(得分:6)

这是Rebol导出的一个非常标准的命名约定,当然它们在代码中应该是小写的。当引用无法显示this之类的代码的聊天客户端或网站中的函数时,全部大写只是一个命名约定。您通常不会在Rebol代码中使用大写字母,除非它们用于其他内容。

但是,如果要避免全局命名空间污染,请使用options: [private]标头声明扩展模块。这样就可以使模块的导出仅由模块或脚本导入,这些模块或脚本使用importneeds标头明确请求它们。这尤其适用于导出低级C类API的模块或扩展,这些API最好只由实现高级包装的模块导入。记住扩展的模块部分是一个完整的Rebol模块是很好的,通常最好将高级包装器代码放在那里,而不是导出类似C的函数,保留它们供内部使用。

另一个技巧是,在导出常量或枚举值时,最好将它们放在模块中的对象中,然后导出对象。这样您就不会导出到全局命名空间,并且可以保护单词不被修改。

另一个技巧是根本不输出内容,让人们使用import函数导入模块。除非您将模块的单词标记为隐藏,否则即使它们未导出,它们仍然可用。这在大多数情况下有点不方便,所以最好使用私有模块。您还可以导出高级API,导出您的低级API,因此如果有人想要使用它,可以导入低级API。

点击此处查看有关如何使用模块和扩展程序的更全面的答案:How are words bound within a Rebol module?