2017-10-11 50 views
0

所以我想一些東西,我覺得應該是很容易的,但我不能得到它的工作...的Lua:獲取表值內本身

基本上我想要做的是:

myTable = { 
    a = 1, 
    b = a + 1 
} 

這是行不通的,我得到「a」爲零的錯誤。合理。 我已經嘗試過是

myTable = { 
    a = 1, 
    b = myTable.a + 1 
} 

myTable = { 
    a = 1, 
    b = self.a + 1 
} 

但它給我的錯誤我說:「myTable的」 /「自我」是零。

我覺得解決方案很簡單,但我自己找不到它,谷歌也沒有那麼有用。

+0

請注意,對於嘗試#3,沒有'self'的上下文(需要一個方法定義),所以它會引用全局'self'(很可能是'nil')。 –

回答

3

在一個語句中沒有辦法做到這一點(至少不是沒有調用任何函數或使用metatables)。這是因爲在像foo = bar這樣的聲明中,直到條形表達式被評估之後纔會分配foo變量。

在第二個例子中,myTable變量不被分配,直到右大括號,所以在myTable.a + 1myTable被視爲unnassigned全局變量,並且得到的nil的值。你的第三個例子中的self是一樣的,只是你以後不試圖給它分配任何東西。 (Lua中,self與冒號語法只寫了特殊的內部功能)。

做你想做的事,你必須做這樣的事情:

myTable = { 
    a = 1 
} 
myTable.b = myTable.a + 1 

或者這樣:

local a = 1 
myTable = { 
    a = a, 
    b = a + 1 
}