哪些类型的语言允许以编程方式创建变量名称?

2024-04-30

这个问题纯粹出于求知欲。

在相对频繁地浏览 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是否属于变量赋值/求值采用这种“宏赋值/扩展”形式的更大类别的语言?对于为什么要这样设计语言的任何解释,和/或其他语言中类似结构的示例,都会加分。


这实际上只是一个有多少语法糖的问题。在任何有价值的语言中,您都可以使用映射或字典数据结构在运行时创建具有某些值的变量名称(键)。某些语言可能比其他语言更透明地将其与普通变量标识符集成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪些类型的语言允许以编程方式创建变量名称? 的相关文章

随机推荐