我通常在另一个文本编辑器中工作,只需将我的工作复制并粘贴到Stata的命令提示符中即可。但是,我注意到命令提示符和do
文件编辑器处理注释的方式有所不同。
下面的代码再现了我发现的东西:
mata
//test comment
/* test comment 2 */
end
//test comment 3
*test comment 4
/* test comment 5*/
从do
文件编辑器运行时,代码运行没有问题。
但是当我在复制并粘贴到命令提示符后运行它时,我在mata
中收到许多r(3000)
错误,在 Stata 中收到r(199)
错误。
唯一的例外是常规 Stata 中的*
注释在两个界面中都可以正常工作。
我还看到mata
中的//
注释与r(3000)
通知一起给出"表达式无效"错误消息,但我仅在使用/* text */
注释时才收到r(3000)
消息。在常规 Stata 中,两种未*
的注释类型都会给出"/不是有效的命令名称"消息以及r(199)
。
我的主要问题是:
- 这种差异背后的原因是什么?我能做些什么来抑制这些错误?
另外,这对我来说就像一个危险信号:
- 当我通过命令提示符而不是
do
文件编辑器运行时,是否有其他行为有所不同?
以下来自第 16 届 Stata 手册的关于 Do-files 的技术说明解释了:
".../* */、//和///注释指示器只能在 do 文件和 ado 文件中使用;您不得以交互方式使用它们。但是,您可以交互式地使用"*"注释指示器...">
所以这里没有什么奇怪的。您可以通过遵循约定轻松防止此类错误。只需阅读上述手册的相关部分即可了解更多详情。
只有StataCorp确定,但这种差异可能是由于Stata在从do
文件或命令提示符解析代码时如何在内部解释代码而产生的。
有关不一致行为的另一个(不相关)示例,请参阅以下帖子:
- Stata 轴标记在多条线上中断时偏离中心
就个人而言,在广泛使用 Stata 多年后,我在从do
文件和交互式运行代码时没有注意到任何其他主要差异。