2016-05-15 82 views
1
function1 
    weaponsList.earth = {weapon_type='regular',fireTime=0, fireRate=0.7, speed = 250, img = nil} 
end 

你能做這樣的事情來訪問子成員嗎?消除Lua中表格的前綴

"using weaponsList,earth" 
    fireTime = 2 
    fireRate = 2 
    speed = 2 
    end 

,而不必爲此

weaponsList.earth.fireTime = 2 
    weaponsList.earth.fireRate = 2 
    weaponsList.earth.speed = 2 

不知道這是什麼所謂的,但我已經用C或C++看出這一點。有沒有辦法在Lua做到這一點,它是什麼叫什麼名字?

回答

7

您可以執行以下操作,但要小心。將_ENV設置爲表格,意味着在該範圍內,您無法在表格外看到。

do local _ENV = weaponsList.earth 
    fireTime = 2 
    fireRate = 2 
    speed = 2 
end 

另外,可能更好的方法很簡單:

do local e = weaponsList.earth 
    e.fireTime = 2 
    e.fireRate = 2 
    e.speed = 2 
end 

做多操作之前指定一個嵌套表的局部變量實際上是在基礎的Lua實現優化,因爲它不會需要在每種用法中對外部表格進行解引用。

0

您可以將表格簡化爲更小的變量。

t = weaponsList.earth 

現在t.firerate和weaponList.earth.firerate一樣。調整t的值也會更新原始表格。

不知道這是否會有所幫助,但您也可以將表中的所有變量保存到全局變量中。

for k,v in pairs(table) do 
    _G[k] = v 
end 

編輯:謝謝你的校正LHF

+2

改變't.speed' *將*'改變weaponsList.earth.speed'。 – lhf