这里涉及什么概念?Python和R中的示例

Dav*_*415 9 python functional-programming r

我试图找到正确的语言来描述以下概念.也许有人可以帮助我.

这是关于编程的一般问题,但我将使用Python和R作为示例.

在Python中,我们可以在这样的字典中放置一些东西

myData = {}
myData["myField"] = 14
Run Code Online (Sandbox Code Playgroud)

在R中,例如,使用data.table包,我们可以写类似的东西

data = data.table(x = c(1, 2, 3))
data[,myField: = x^2]
Run Code Online (Sandbox Code Playgroud)

这些做了不同的事情,但比较了每个人的第二行.在Python中,它"myField"是一个字符串.在R data.table示例中,没有字符串.R示例有点好,因为它可以节省您的输入,但如果您想编写myField一个变量的程序,它会给您带来麻烦.在Python中,这是微不足道的,因为你可以做到

myData[myVariable] = 14
Run Code Online (Sandbox Code Playgroud)

myVariable被定义为另一个字符串.在R中,你也可以这样做,但必须使用不同的语法,这意味着你必须知道两种完全不同的语法编程方式.

我的问题:这叫什么?我知道它与范围规则有关(也许是元编程?),但无法找到适合它的语言.任何人?

rob*_*les 1

我相信这种编程语言“功能”被称为“裸字符串”。

PHP 也对此提供(已弃用)支持:为什么 $foo[bar] 错误?

它被广泛认为是一个非常糟糕的想法,因为存在与变量或常量名称重叠的风险,并且在生产代码中绝对应该避免。然而,JavaScript 在避免这些问题的想法上有一个有趣的转变:

var obj = { key: "value" };
Run Code Online (Sandbox Code Playgroud)

您可以在不使用引号的情况下定义内联对象上的键。这是可行的,因为你不能以其他方式做到这一点 - 键被解析为字符串,而不是变量名。我发现在仅使用字典中预定义键的程序中,这是一个非常有用的权衡。作为参考,Python 版本需要引号,但允许您使用变量,如您所演示的:

obj = { "key": "value", key_var: "value" }
Run Code Online (Sandbox Code Playgroud)