Локальная функция Lua не выбирает членов локальной переменной, за исключением случаев, когда они назначены при объявлении - PullRequest
1 голос
/ 01 декабря 2019

Работает следующий код:

local randomPick = {
    currentPick = 'N/A',
    pickNode = function(self)
        randomPick = node.random(1, table.getn(availableNodes));
        self.currentPick = availableNodes[randomPick];
        return self.currentPick
    end
};

local sentF = function(port, ip, data)
    print('Sent info to ' .. randomPick.currentPick);
end

Но если я назначу значения после того, как объявлю randomPick, я получу ошибку:

local randomPick = {};
randomPick.currentPick = 'N/A';
randomPick.pickNode = function(self)
        randomPick = node.random(1, table.getn(availableNodes));
        self.currentPick = availableNodes[randomPick];
        return self.currentPick
    end

local sentF = function(port, ip, data)
    print('Sent info to ' .. randomPick.currentPick);
end

Это не работает и выдаетиз этой ошибки. Почему функция выбирает пустое значение randomPick, когда я присваиваю значения этим двум элементам?

PANIC: незащищенная ошибка при вызове Lua API (попытка индексировать значение до значения '?' (Числовое значение))

1 Ответ

3 голосов
/ 01 декабря 2019

Вы создаете локальную таблицу randomPick.

После вызова randomPick.pickNode вы перезаписываете таблицу randomPick случайным числом.

Если вы затем вызываете setnF, вы 'будет индексировать локальное значение randomPick, которое является числом.

...