2017-04-13 54 views
0

我想用Sublime和Corona创建一个Lua程序。我想获取网页,使用模式从网页中提取某些文本,然后将提取的文本保存到表中。我正在使用Corona提供的network.request方法变量不保存来自network.request的event.response -Lua

问题:提取的文本没有保存到我创建的全局变量中。每当我尝试引用它或在函数之外打印它时,它都返回nil。任何想法为什么发生这种情况?

我附上了我的event.response输出的截图。这就是我想要的东西要保存到我的Lua表

Event.response Output

这里是我的代码:

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

你确定networkListener被调用吗?展示如何在功能外打印这些文本......你想要参考什么?餐馆或其领域之一?餐馆不是全球btw ... – Piglet

回答

0

这听起来像一个作用域的问题。从您输出的输出看起来好像正在调用networkListener,并且您正在成功将文本添加到restaurants表中。此外,由于您将restaurants定义为表格,因此它应该是您引用它时的表格,而不是零。因此,通过推论,问题一定是您试图从不在范围内的某个地方访问restaurants表。

如果您在文件顶层声明restaurants为“本地”(即不在函数或块中),它将可以被整个文件访问,但它不会被任何文件。因此,代码中的table.insert(restaurants, i)可以工作,但如果您尝试从文件外部的某处引用restaurants,则它将为nil。我猜这是你遇到的问题的原因。

有关范围的更多详细信息,请参阅Programming in Lua书。本书适用于Lua 5.0,但在Lua的后续版本中,局部变量的范围规则没有改变(截至本文撰写时,最新的版本是Lua 5.3)。