2014-01-27 51 views
9

我正在嘗試找到正確的語言來描述以下概念。也許有人可以幫助我。這裏涉及什麼概念? Python和R中的示例

這是一個關於編程的常見問題,但我將使用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中,你也可以這樣做,但必須使用不同的語法,這意味着你必須知道兩種完全不同的語法編程方式。

我的問題:這是叫什麼?我知道它與範圍規則有關(可能是元編程?),但無法找出正確的語言。任何人?

+3

您確實意識到,您是否認爲您在R中描述的行爲是特定於data.table包以及解析其參數的方式。像數據框和列表這樣的更基本的數據結構可以很好地處理字符索引。 – joran

+0

是的,我知道。我只是用它作爲例子。 – Dave31415

+3

當您將詞彙範圍與表達式作爲第一類對象的原則相結合時,您就會得到它。後者在Python中不是真的。 –

回答

1

我相信這種編程語言「功能」被稱爲「裸線」。

PHP也有這個(不推薦)支持:Why is $foo[bar] wrong?

它被廣泛認爲是因爲變量或常量名重疊的風險的一個非常可怕的想法,一定要在生產代碼來避免。然而,JavaScript在避免這些問題的想法一個有趣的轉折:

var obj = { key: "value" }; 

您可以定義內嵌對象鍵不使用引號。這是有效的,因爲你的不能以另一種方式來做 - 鍵被解析爲一個字符串,而不是一個變量名。我發現這是一個非常有用的折衷方案,你只能在字典中使用預定義的鍵。作爲參考的Python版本需要引號,但允許使用變量,如您所示:

obj = { "key": "value", key_var: "value" } 
0

我不確定這是不是您要求的內容,而是在您的Python例如,"myField"myData["myField"]是一個字符串文字 - 即,你是硬編碼中的鍵值。類似地,如果定義一個Python函數

def myFun(a): 
    # magic happens 

和你調用函數作爲myFun("goober"),你會傳遞一個字符串文字("goober"),而不是限定可變b = "goober"然後使在該變量作爲myFun(b)

0

你的問題似乎與Lisp(及相關語言,也是Mathematica),c.f.的定義/使用(未評估)符號有關。 the answers here