我正在为Rebol 3开发一些扩展(posix/fann/math)。
为了避免全局名称空间污染,我使用简单的前缀源标识符导出函数。例如:fork的POSIX-FORK,或nanosleep的POSIX-NANOSLEEP。
有没有更好的方法或者官方的Rebol命名约定?
发布于 2013-04-03 08:22:23
这是一个非常标准的Rebol导出命名约定,当然它们在代码中应该是小写的。当提到聊天客户端或网站中不能显示this等代码的函数时,全大写只是一种命名约定。通常情况下,Rebol代码中的任何单词都不会大写,除非它们用于其他用途。
但是,如果您希望避免全局命名空间污染,请使用options: [private]标头声明扩展模块。这将使模块的导出仅由使用import或needs头显式请求它们的模块或脚本导入。这尤其适用于导出低级类C语言API的模块或扩展,这些API最好只由实现高级包装器的模块导入。记住,扩展的模块部分是一个完整的Rebol模块,通常最好将高级包装器代码放在那里,根本不导出类似C的函数,将它们保留为内部使用。
另一个技巧是,当您导出常量或枚举值时,最好将它们放在模块中的对象中,然后导出该对象。这样就不会导出到全局名称空间,并且可以保护单词不被修改。
另一个技巧是根本不导出东西,而是让人们使用import函数导入您的模块。除非您将模块的单词标记为隐藏,否则即使它们不被导出,它们也仍然可用。但在大多数情况下,这有点不方便,所以最好使用私有模块。您还可以导出高级API,而不导出低级API,因此如果有人想要使用低级API,则可以导入它。
有关如何使用模块和扩展的更全面的答案,请查看此处:How are words bound within a Rebol module?
https://stackoverflow.com/questions/15773026
复制相似问题