在Lua中将数组作为函数参数传递?

Lem*_*ime 5 arrays parameters lua class function

我正在尝试更改我在此视频中找到的类示例,以使其更加流线型使用.希望我的评论可以解释我正在努力完成的事情.我遇到的问题是当我尝试使用数据表时它会给我这个错误:lua:class example.lua:7:尝试索引字段'data'(一个零值)

我假设这意味着数组没有正确传递给函数,但我不知道为什么.我是Lua的初学者.

这是我得到的:

local enemy = {}; --enemy class table

function enemy:New(data)
  local object = {}; --table to store all of data within class
  local len = # data --get length of passed table
  for i = 1, len, 2 do --loop to input all data from passed table into object table
    object.data[i] = data[i + 1];
  end

  function object:getData(choice) --function that allows us to retrieve data from the class
    return self[choice];
  end

  return object; --return class data table so we can create objects using the class
end

local monsterdata = {"name", "monster", "x", 64, "y", 128, "hp", 4}; --table containing data of monster. keys are odd numbered, values to those keys are even numbered
local monster = enemy:New(monsterdata); --create a object using the class

local test = monster:getData("x"); --set variable to a value with the getData function

print(test);
Run Code Online (Sandbox Code Playgroud)

Kor*_*icz 5

你没有创建object.data表 - Lua中的每个表都需要初始化:

local object = {}
local object.data = {}
Run Code Online (Sandbox Code Playgroud)

要么

local object = { data = {} }
Run Code Online (Sandbox Code Playgroud)

但是,除非修复getData函数,否则您的示例将无法按预期方式工作:

function object:getData(choice) 
  return self.data[choice]
end
Run Code Online (Sandbox Code Playgroud)

最后,这是Lua,所以你;的代码中不需要任何代码:P.


mkl*_*uwe 4

如果你想object保存数据,你可能想写

object[data[i]] = data[i + 1];
Run Code Online (Sandbox Code Playgroud)

代替

object.data[i] = data[i + 1];
Run Code Online (Sandbox Code Playgroud)

这样做打印的结果是64