Lua中消除表前缀

function1
   weaponsList.earth = {weapon_type='regular',fireTime=0, fireRate=0.7, speed = 250, img = nil}
end

你可以像这样访问子成员吗?

  "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中有没有办法做到这点,它叫什么?

点赞
用户1603365
用户1603365

你可以这样做,但要小心。将 _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 基本实现中的优化,因为它不需要解除引用每个使用中的外部表。

2016-05-15 04:02:43
用户6336645
用户6336645

你可以将一个表简化为一个较小的变量。

t = weaponsList.earth

现在,t.firerate与weaponsList.earth.firerate相同。调整t的值也会更新原始表。

不确定是否有帮助,但你也可以将表中的所有变量保存到全局变量中。

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

编辑:感谢lhf的更正。

2016-05-15 10:16:21