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

问题描述 投票:0回答:2

我(lua新手/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”(零值) 函数名称会在两个 say 调用中打印出来。

谢谢

lua lua-table
2个回答
3
投票

你想要

fn = ft[index]

因为

fn = ft.index

相当于

fn = ft["index"]

1
投票

这在《Programming in Lua》一书中被描述为初学者常见的错误。如果你犯了错误,你就知道你已经开始学习了。 @lhf 的答案是正确的,但我只是想向访问此问题的其他人强调这本精彩的书 Programming in Lua 初学者的一个常见错误是将 a.x 与 a[x] 混淆。首先 form表示a[“x”],即以字符串“x”索引的表。 第二种形式是由变量 x 的值索引的表。看 区别:

a = {} x = "y" a[x] = 10 -- put 10 in field "y" print(a[x]) --> 10 -- value of field "y" print(a.x) --> nil -- value of field "x" (undefined) print(a.y) --> 10 -- value of field "y"

	
© www.soinside.com 2019 - 2024. All rights reserved.