Lua не создает экземпляр локальной переменной быстро, чтобы напечатать это? Embeded ESP8266
Я получил EPS8226, на который я загрузил main.lua
файл и некоторые другие конфиги. Когда я бегу main.lua
с dofile()
в терминале print
из функции обратного вызова выводит только "sensorId" без "sent 0". Тем не менее, если я бегу main.lua
опять или я print()
что-то раньше (либо внутри function()
который вызывает обратный вызов, или внутри самого обратного вызова) он будет правильно печатать "sensorId sent 0". Это также работает, если я не использую local
переменная.
function registerReaders()
for key, value in pairs(sensorConfig.data)
do
gpio.mode(value.pin, gpio.INPUT)
value.timer:alarm(value.polling, tmr.ALARM_AUTO, function() callbacks.sendData(sensorConfig.sensorId[key]) end)
tmr.create():alarm(1000, tmr.ALARM_SINGLE, function() callbacks.sendData(sensorConfig.sensorId[key]) end)
end
end
Печать "[sensorId_value]"
callbacks.sendData = function(sensorId)
local data = 1
print(sensorId .. " sent " .. data)
end
Печать выполнена правильно ("OK", затем "[sensorId_value] отправлено 0")
callbacks.sendData = function(sensorId)
local data = 1
print("OK")
print(sensorId .. " sent " .. data)
end
Печать выполняется правильно ("[sensorId_value] отправлено 1")
callbacks.sendData = function(sensorId)
print(sensorId .. " sent 0")
end
1 ответ
Во всех примерах sensorId является переменной, а не строкой, поэтому, если sensorId = "sensorId", ни один из них не должен печатать "sensorId sent 0".
В первом примере (все они на самом деле) " sent " является литералом, он должен выводиться независимо от значения данных.
Разве второй пример не должен печатать "[...] отправлено 1"?
Попробуйте использовать имя переменной, отличное от data, может быть, есть некоторая путаница с прямым значением.