这个问题纯粹出于求知欲。
在相对频繁地浏览 Python 部分后,我看到了许多类似的问题this https://stackoverflow.com/questions/1429814/how-to-programmatically-set-a-global-module-variable,有人要求以编程方式定义全局变量。他们中的一些人意识到了其中的陷阱exec
,其他人则不然。
然而,我最近在 Stata 中编程,常见以下情况:
local N = 100
local i = 1
foreach x of varlist x1 - x`N' {
local `x' = `i' * `i'
++i
}
用 Stata 的话说,一个名为N
被创建,并且N
计算结果为 100。在每次迭代中foreach
循环,一个值来自x1
to x100
被分配给本地宏x
。然后,循环内的行分配以下平方i
到扩展x
,具有相同结尾的本地宏i
。也就是说,在这个循环之后x4
展开为 4^2 并且x88
扩展到 88^2。
在 Python 中,执行类似操作的方法是:
squares = {}
for x in range(1,101):
squares[x] = x**2
Then squares[7]
等于 7^2。
这是一个非常简单的例子。 stata 宏还有很多其他用途。您可以使用它们作为传递要评估的函数的方式,例如:
local r1 "regress"
local r2 "corr"
foreach r of varlist r1-r2 {
``r'' y x
}
周围的双勾号r
将该宏展开两次,首先r1
/r2
然后到regress
/corr
,运行线性回归的结果是y
作为受抚养人和x
作为自变量,然后显示之间的相关性y
and x
。甚至更复杂的事情也是可能的。
我的问题基本上是,stata是否属于变量赋值/求值采用这种“宏赋值/扩展”形式的更大类别的语言?对于为什么要这样设计语言的任何解释,和/或其他语言中类似结构的示例,都会加分。