如何组织子程序以供多个命令使用?

时间:2018-05-30 02:16:59

标签: stata

我正在创建一个包含两个新命令的包,比如foobar

例如,如果foo.ado包含:

program define foo
    ...
    rex
end

program define rex
    ...
end

但我的另一个命令bar.ado也需要拨打rex。我应该把rex放在哪里?

我看到以下几个选项:

  1. 同时创建rex.ado文件。
  2. 创建一个rex.do文件,并使用每个文件底部的foo.adobar.adoinclude "`c(sysdir_plus)'r/rex.do"中包含该文件。
  3. 将代码复制到foo.adobar.ado,这看起来很难看,因为现在代码必须在两个地方维护。
  4. 组织foobar所需的子程序的最佳做法是什么?

    此外,如果子例程被调用rex_rex或其他东西 - 可能是_foobar_rex - 以表明它实际上是foo和{{}}的子命令{1}}依赖于正确的工作而不是单独的命令?

1 个答案:

答案 0 :(得分:1)

创建一个rex.ado文件

你的问题有点过于宽泛。就个人而言,我会选择第一个安全选项,尽管它实际上取决于项目的结构。有时在单个rex文件中包含ado可能就足够了。例如,如果foo是包装器命令,则会出现这种情况。但是,对于大多数其他用例,包括共享一个共同程序的两个命令,我坚信你需要一个单独的ado文件。

第二个选项显然是不必要的,因为第一个选项做同样的事情,而且每次调用它都不需要加载程序。第三种选择可能是编程环境中最糟糕的选择,因为它可能会产生冲突并且难以维持。

关于命名约定,如果将程序作为_rex文件中的子例程包含在内,我建议使用ado 之类的内容。否则,rex将会很好,并且还表明该程序在您的项目中具有更广泛的范围。在我看来,在rex文件的开头使用注释来提供ado的预期用法的更详细说明,而不是试图将其合并到名称中。