2013-07-08 39 views
2

我想为Lua数组中的每个字符串元素存储一些值。Lua:将值存储在字符串数组中

-- Emulating different Browsers 
local user_agent = { 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",   
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",   
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",     
"Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0",                     
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",                
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)",               
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)",    
"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25" 
} 

-- Number of connections per host and total connections for each browser/user_agent 
user_agent[1].max_conn_perhost , user_agent[1].max_conn_total = 6, 17 
user_agent[2].max_conn_perhost , user_agent[2].max_conn_total = 6, 10 
user_agent[3].max_conn_perhost , user_agent[3].max_conn_total = 6, 10 
user_agent[4].max_conn_perhost , user_agent[4].max_conn_total = 6, 16 
user_agent[5].max_conn_perhost , user_agent[5].max_conn_total = 6, 16 
user_agent[6].max_conn_perhost , user_agent[6].max_conn_total = 6, 35 
user_agent[7].max_conn_perhost , user_agent[7].max_conn_total = 6, 35 
user_agent[8].max_conn_perhost , user_agent[8].max_conn_total = 6, 16 

这是抛出错误:

attempt to index field '?' (a string value) 

我已经在一些例子中发现,如果我没有初始化字符串数组,然后它会工作。 任何人都可以请建议任何更简单的解决方案来实现这一目标或纠正问题。

回答

5

从你发布的内容来看,你有一个字符串数组,并且想索引它的元素;该代码有没有任何工作机会:

t = { "foo", "bar" } 

-- t[1] is "foo" 
-- t[1].xyz is the same as t[1]["xyz"], which evaluates to "foo"["xyz"], which is probably not what you want 

你需要的是“物”的数组:

t = { {"foo"}, {"bar"} } 

t[1].xyz = 5 -- works 

然而,“富”将成为下指数1,所以你可能会想为它

t = { {name="foo"}, {name="bar"} } 
+0

非常感谢您解释问题和解决方案! –

2

指定一个名称插入声明user_agent后这些线路,但分配给max_conn_perhostmax_conn_total前:

for i, name in ipairs(user_agent) do 
    user_agent[i] = {name = name} 
end 
+0

谢谢,这个简单的解决方案!你能解释一下第二行是如何实现的吗?它是否将数组的元素类型化为对象? –

+0

@KumarVikramjeet - 它用包含这些字符串的对象替换数组元素(字符串)。 –

相关问题