lua表索引为空错误

时间:2018-07-15 19:48:07

标签: lua switch-statement

根据目前为止我所读的内容,我正在尝试编写一个lua开关,看来这是通过使用表来实现的。所以我做了一个真正的准系统表,但是当我尝试运行它时,出现一个错误,说表索引为空。

最终我想要的是基于不同的输入,此代码应在不同的lua文件上调用。但是现在,由于我是这种语言的新手,所以我认为我不会遇到那种索引错误。

谢谢

#!/usr/bin/lua

-- hello world lua program 
print ("Hello World!")

io.write('Hello, where would you like to go?\n')
s = io.read()
io.write('you want to go to ',s,'\n')
--here if i input a i get error
location = {
  [a] = '1',
  [b] = '2',
  [c] = '3',
  [d] = '4',
}

location[s]()

以上是我到目前为止获得的代码。下面是错误。

~$ lua lua_hello.lua 
Hello World!
Hello, where would you like to go?
a
you want to go to a
lua: lua_hello.lua:11: table index is nil
stack traceback:
    lua_hello.lua:11: in main chunk
    [C]: in ?

表代码基于此处的示例:Lua Tables Tutorial部分:表作为数组

2 个答案:

答案 0 :(得分:2)

似乎是问题所在,location[a]location设置为索引a,而不是字符串。当您在输入中输入a时,它将被读取为'a',它是一个字符串。索引[a]与索引['a']不同。您想要的是替换您的分配,以便将它们分配给字符串(location['a'] = '1')。

正如Ihf所说,如果要打印输出,则需要调用print(location[s]),因为location[s]只会返回字符串'1'(或返回任意值,就像字符串一样) )。如果要分配数值(用于计算等),则应使用location['a'] = 1。 或者,将值保持为字符串形式,当您尝试使用该值时,只需使用tonumber()。 示例:x = 5 * tonumber(location[s])

我希望这对您有帮助,祝您度过愉快的一周!

答案 1 :(得分:1)

尝试

location = {
  ['a'] = '1',
  ['b'] = '2',
  ['c'] = '3',
  ['d'] = '4',
}

然后该错误消失了,但由于attempt to call a string value (field '?')是字符串location['a']而被'1'取代。

也许你想要

print(location[s])