我正在努力寻找合适的语言来描述以下概念。也许有人可以帮助我。
这是关于编程的一般问题,但我将使用Python和R作为示例。
在Python中,我们可以在这样的字典中放置一些东西
myData = {}
myData["myField"] = 14
在R中,例如,使用data.table
包,我们可以编写类似
data = data.table(x = c(1, 2, 3))
data[,myField: = x^2]
这些做了不同的事情,但比较了每个人的第二行。在Python中,"myField"
是一个字符串。在R data.table
示例中,没有字符串。 R示例有点好,因为它可以节省您的输入,但如果想编写myField
是变量的程序,则会给您带来麻烦。在Python中这是微不足道的,因为你可以做到
myData[myVariable] = 14
将myVariable
定义为另一个字符串。在R中,你也可以这样做,但必须使用不同的语法,这意味着你必须知道两种完全不同的语法编程方式。
我的问题:这叫什么?我知道它与范围规则有关(也许是元编程?),但无法找到适合它的语言。任何人?
答案 0 :(得分:1)
我相信这种编程语言“功能”被称为“裸字符串”。
PHP也有(不建议使用)支持:Why is $foo[bar] wrong?
由于存在与变量或常量名称重叠的风险,它被广泛认为是一个非常糟糕的主意,并且在生产代码中绝对应该避免。但是,JavaScript在避免这些问题的想法上有一个有趣的转折:
var obj = { key: "value" };
您可以在不使用引号的情况下在内联对象上定义键。这是有效的,因为你不能以其他方式执行它 - 键被解析为字符串,而不是变量名。我发现在程序中你只使用字典中的预定义键是一个非常有用的权衡。作为参考,Python版本需要引号,但允许您使用变量,如您所示:
obj = { "key": "value", key_var: "value" }
答案 1 :(得分:0)
我不确定这是否是您所要求的,但是,在您的Python示例中,"myField"
中的myData["myField"]
是字符串文字 - 即,您在键值中硬编码。同样,如果您定义了Python函数
def myFun(a):
# magic happens
并且您将函数调用为myFun("goober")
,您将传入字符串文字("goober"
),而不是定义变量b = "goober"
然后传入变量为myFun(b)
。
答案 2 :(得分:0)
您的问题似乎与Lisp(及相关语言,以及Mathematica)中的(未评估的)符号的定义/使用有关,c.f。 the answers here