首页 文章

在Lua中,如何使用表索引调用存储在表中的函数?

提问于
浏览
1

我是(lua newbie / 3days)尝试调用存储在lua表中的函数,如下面的代码所示

function sayhello()
  return "hello";
end

function saygoodbye()
  return "goodbye";
end

funct = {
  ["1"] = sayhello,
  ["2"] = saygoodbye,
  ["name"] = "funct"
};

function say(ft,index)
  local name = ft.name;
  print("\nName : " .. name .. "\n");
  local fn = ft.index;
  fn();
end

say(funct,"1"); --  attempt to call local 'fn' (a nil value)
say(funct,"2"); --  attempt to call local 'fn' (a nil value)
                --  the Name funct prints in both cases

我收到错误尝试调用本地'fn'(一个零值)名称功能在两个说来电话中打印 .

谢谢

2 回答

  • 3

    你要

    fn = ft[index]
    

    因为

    fn = ft.index
    

    相当于

    fn = ft["index"]
    
  • 1

    这被描述为Programming in Lua书中常见的初学者错误 . 如果你犯了错误,你知道你已经开始学习了 . @lhf的答案是正确的,但我只是想为其他访问此问题的人强调这本精彩的书[Lua中的Praogramming](https://www.lua.org/pil/2.5.html) .

    初学者的一个常见错误是将a.x与[x]混淆 . 第一种形式表示[“x”],即由字符串“x”索引的表 . 第二种形式是由变量x的值索引的表 . 看到差异:a = {}
    x =“y”
    a [x] = 10 - 在字段“y”中输入10
    print(a [x]) - > 10 - 字段“y”的值
    print(a.x) - > nil - 字段“x”的值(未定义)
    print(a.y) - > 10 - 字段“y”的值

相关问题