lua: локальный вызов функции с локальной строкой -> nil

Я получил этот код, в котором «call_name», кажется, остается нулевым.

function mdbTest(conf)
  if conf.m_string:sub(6,9) == "MBUS" then
      local print_name, call_name = "MBUS","mbus"
  else
      local print_name, call_name = "MDB","mdb"
  end

  local port_handler = rawio.open(string.format("/dev/%s",call_name))
end

В конце концов, это не проблема из-за того, что я просто могу сделать call_name общедоступным, но я хотел бы знать, почему это так. Может кто-нибудь объяснить это, пожалуйста?

Спасибо.


person jawo    schedule 22.08.2014    source источник


Ответы (1)


call_name в обоих случаях является локальным для блока if/else, т.е.:

function test()
    if true then
        local a = 42
    end
    print(a)
end

test()

nil

исправить: объявить его в рамках его использования

function test()
    local a
    if true then
        a = 42
    end
    print(a)
end

test()

42

person Dmitry Ledentsov    schedule 22.08.2014