Lua не создает экземпляр локальной переменной быстро, чтобы напечатать это?Embeded ESP8266 - PullRequest
0 голосов
/ 09 июня 2018

Я получил EPS8226, на который я загрузил файл main.lua и некоторые другие конфигурации.Когда я запускаю main.lua с dofile() в терминале, print из функции обратного вызова выводит только «sensorId» без «отправлено 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" затем "Отправлено"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 Ответ

0 голосов
/ 10 июня 2018

Во всех примерах sensorId является переменной, а не строкой, поэтому, если sensorId = "sensorId", ни один из них не должен печатать "sensorId sent 0".

В первом примере (все они на самом деле) "sent" - это литерал, он должен выводиться независимо от значения данных.

Разве второй пример не должен печатать "[...] sent 1"?

Попробуйте использоватьИмя переменной, отличное от data, может быть, есть некоторая путаница с прямым значением.

...