2017-04-13 4 views
0

Ich versuche ein Lua-Programm mit Sublime und Corona zu erstellen. Ich möchte eine Webseite abrufen, ein Muster verwenden, um bestimmten Text von der Seite zu extrahieren, und den extrahierten Text dann in einer Tabelle speichern. Ich verwende die Methode "network.request" von CoronaVariable speichert event.response nicht von network.request -Lua

Das Problem: Der extrahierte Text wird nicht in die globale Variable gespeichert, die ich erstellt habe. Wann immer ich versuche, es zu referenzieren oder es außerhalb der Funktion zu drucken, gibt es null zurück. Irgendwelche Ideen, warum das passiert?

Ich habe einen Screenshot meiner event.response-Ausgabe angehängt. Dies ist, was ich in meiner Lua Tabelle gespeichert werden sollen

Event.response Output

Hier mein Code:

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

Haben Sie sichergestellt, dass NetworkListener aufgerufen wird? zeige, wie du diese Texte außerhalb der Funktion druckst ... was versuchst du zu referenzieren? Restaurants oder eines seiner Felder? Restaurants ist nicht global übrigens ... – Piglet

Antwort

0

Das klingt wie ein Scoping-Problem. Von der Ausgabe, die Sie geben, sieht es aus wie networkListener wird aufgerufen, und Sie fügen erfolgreich den Text in der restaurants Tabelle hinzu. Da Sie außerdem restaurants als Tabelle definieren, sollte es eine Tabelle sein, wenn Sie darauf verweisen, nicht NULL. Also, durch den Abzug muss das Problem sein, dass Sie versuchen, auf die restaurants Tabelle von irgendwo zuzugreifen, wo es nicht im Bereich ist.

Wenn Sie restaurants als "lokal" in der obersten Ebene einer Datei deklarieren (dh nicht innerhalb einer Funktion oder eines Blocks), ist sie für die gesamte Datei zugänglich, aber für nichts außerhalb der Datei zugänglich Datei. So funktioniert die table.insert(restaurants, i) in Ihrem Code, aber wenn Sie versuchen, restaurants von irgendwo außerhalb der Datei zu referenzieren, wird es nil sein. Ich vermute, das ist der Grund für die Probleme, denen Sie begegnen.

Weitere Details zum Umfang finden Sie im Buch Programming in Lua. Das Buch ist für Lua 5.0, aber die Scoping-Regeln für lokale Variablen haben sich in späteren Versionen von Lua nicht geändert (zum jetzigen Zeitpunkt ist Lua 5.3).

Verwandte Themen