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, может быть, есть некоторая путаница с прямым значением.

Другие вопросы по тегам