Variable does not save event.response from network.request -Lua

我正在使用Sublime和Corona创建Lua程序。我想获取一个网页,使用模式从页面中提取特定文本,然后将提取的文本保存到一个表中。我正在使用Corona提供的network.request方法

问题:提取的文本保存不到我创建的全局变量中。每当我尝试在函数外引用它或打印它时,它都返回nil。有什么想法吗?

我已经附上了我的event.response输出的屏幕截图。这是我想保存到我的Lua表中的内容

Event.response Output

以下是我的代码:

local restaurants = {}
yelpString = ""

--这个方法告诉程序在网站被检索后要做什么
local function networkListener( event )

    if ( event.isError ) then
        print( "Network error: ", event.response )
    else
         yelpString = event.response

        --循环遍历网站以查找提取餐厅名称的模式并打印它出来
        for i in string.gmatch(yelpString, "<span >(.-)<") do
           table.insert(restaurants, i)
           print(i)
        end
    end
end

--检索网站
network.request( "https://www.yelp.com/search?
cflt=restaurants&find_loc=Cleveland%2C+OH%2C+US", "GET", networkListener )
点赞
用户5287638
用户5287638

这听起来像是一个作用域问题。从你给出的输出来看,似乎 networkListener 被调用了,你也成功地将文本添加到了 restaurants 表中。此外,由于你将 restaurants 定义为表,当你引用它时应该是一个表,而不是 nil。所以由此推断,问题必须是你正试图从它不在作用域内的地方访问 restaurants 表。

如果在文件的顶层(即不在函数或块内部)将 restaurants 声明为 "local",那么它将可以被整个文件访问,但是其他文件访问不到。因此,你代码中的 table.insert(restaurants, i) 将会起作用,但是如果你试图从文件外部引用 restaurants,它将会是 nil。我猜这是你遇到问题的原因。

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

2017-04-13 08:24:36