我正在尝试使用Sublime和Corona创建一个Lua程序。我想获取一个网页,使用模式从页面中提取某些文本,然后将提取的文本保存到表中。我正在使用Corona提供的network.request方法
问题:提取的文本没有保存到我创建的全局变量中。每当我尝试引用它或在函数外部打印它时它返回nil。任何想法为什么会发生这种情况?
我附上了我的event.response输出的屏幕截图。这就是我想要保存到我的Lua表中的原因
这是我的代码:
local restaurants = {}
yelpString = ""
--this method tells the program what to do once the website is retrieved
local function networkListener( event )
if ( event.isError ) then
print( "Network error: ", event.response )
else
yelpString = event.response
--loops through the website to find the pattern that extracts
restaurant names and prints it out
for i in string.gmatch(yelpString, "<span >(.-)<") do
table.insert(restaurants, i)
print(i)
end
end
end
-- retrieves the website
network.request( "https://www.yelp.com/search?
cflt=restaurants&find_loc=Cleveland%2C+OH%2C+US", "GET", networkListener )
答案 0 :(得分:0)
这听起来像是一个范围问题。从您提供的输出中,看起来正在调用networkListener
,并且您已成功将文本添加到restaurants
表中。此外,由于您将restaurants
定义为表,因此在引用它时它应该是一个表,而不是nil。因此,通过演绎,问题必须是您试图从不在范围内的某个地方访问restaurants
表。
如果您将restaurants
声明为&#34;本地&#34;在文件的顶层(即不在函数或块内),整个文件都可以访问它,但文件外的任何内容都无法访问它。因此,代码中的table.insert(restaurants, i)
会起作用,但如果您尝试从文件外部的某处引用restaurants
,则它将为nil
。我猜这是你遇到的问题的原因。
有关范围的更多详细信息,请查看Programming in Lua本书。本书适用于Lua 5.0,但局部变量的范围规则在以后的Lua版本中没有改变(截至本文撰写时,最新版本是Lua 5.3)。