根据目前为止我所读的内容,我正在尝试编写一个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部分:表作为数组
答案 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])