变量不保存来自network.request -Lua

时间:2017-04-13 01:23:33

标签: variables events lua request corona

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

问题:提取的文本没有保存到我创建的全局变量中。每当我尝试引用它或在函数外部打印它时它返回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 )

1 个答案:

答案 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)。