【问题标题】:Rebol, extensions and function namingRebol、扩展和函数命名
【发布时间】:2013-03-24 06:34:00
【问题描述】:

我正在为 Rebol 3 (posix/fann/math) 开发一些扩展。

为了避免全局命名空间污染,我使用简单的前缀源标识符导出函数。例如:POSIX-FORK 代表fork,或POSIX-NANOSLEEP 代表nanosleep

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

【问题讨论】:

    标签: rebol


    【解决方案1】:

    这是 Rebol 导出的非常标准的命名约定,当然它们在代码中应该是小写的。当提到聊天客户端或网站中无法显示代码(如this)的函数时,全大写只是一种命名约定。在 Rebol 代码中,您通常不会将任何单词大写,除非它们用于其他用途。

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

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

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

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

    【讨论】:

    • 感谢您的澄清,您的链接写得很好,值得阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2011-12-05
    • 2017-12-19
    相关资源
    最近更新 更多