이것은 어리석은 질문 일지 모르지만, 나는 어떤 일이 일어나고 있는지 모른다.범위 변수를 무시하는 루아
저는 간단한 스크립트를 사용하여 Google 시간을 가져오고이를 time
전역 변수로 설정해야합니다. 따라서 receive
이벤트에서 가져온 시간을 인쇄하면 제대로 작동합니다.
이벤트 외부에서 호출 할 때 변수 time
이 항상 비어 있습니다. 여기 코드는 다음과 같습니다
-- test.lua
time = ""
function getTime()
conn = net.createConnection(net.TCP, 0)
conn:connect(80,'google.com')
conn:on("connection", function(conn, payload)
conn:send("HEAD/HTTP/1.1\r\n"..
"Host: google.com\r\n"..
"Accept: */*\r\n"..
"User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)"..
"\r\n\r\n"
)
end)
conn:on("receive", function(conn, payload)
conn:close()
time = string.sub(payload,string.find(payload,"Date: ")
+6,string.find(payload,"Date: ")+35)
end)
print("testing: " .. time) -- WORKS!
end
getTime()
print("variable: ".. time)
내가 (nodemcu - 업 로더 터미널을 사용) 함수를 호출하고있어 방법은 다음과 같습니다
➜ test nu terminal
--- Miniterm on /dev/cu.wchusbserial1410 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
> dofile('lib/test.lua')
variable:
> testing: Sat, 20 May 2017 01:37:35 GMT
어떤 도움이 정말 감사하겠습니다! 감사합니다.
조심해! 이것은'connection'과'receive' 콜백에서'conn' 변수를 다시 사용하기 때문에 메모리 누수를 만듭니다. http://stackoverflow.com/a/37379426/131929를 참조하십시오. –
@ MarcelStör .. 이벤트가 끝나면 'nil'로 설정하면 해결할 수 있습니까? – hugalves