Одно и то же имя переменной в разных файлах модуля всегда возвращает последний - PullRequest
2 голосов
/ 06 января 2020

Я написал два lua модуля с одинаковым именем переменной chapter в каждом из них, но с разными строками. В основном коде, когда я пытаюсь распечатать все главы, то есть получить главы из разных модулей и распечатать их все, только главы, которые были загружены последними, напечатают свои главы.

Как получить доступ к главы переменные в каждом модуле в основном коде? Вот MWE:

Первый модуль:

local modOne = {}

Chapter = {}
    Chapter[1] = {chapNum = 1}
        Chapter[1][1] = "This is the first verse of the modOne"
        Chapter[1][2] = "This is the second verse of the modOne"
    Chapter[2] = {chapNum = 2}
        Chapter[2][1] = "This is the third verse of the modOne"
        Chapter[2][2] = "This is the fourth verse of the modOne"

return modOne

Второй модуль:

local modTwo = {}

Chapter = {}
    Chapter[1] = {chapNum = 1}
        Chapter[1][1] = "This is the first verse of the modTwo"
        Chapter[1][2] = "This is the second verse of the modTwo"
    Chapter[2] = {chapNum = 2}
        Chapter[2][1] = "This is the third verse of the modTwo"
        Chapter[2][2] = "This is the fourth verse of the modTwo"

return modTwo

Main код:

oneModule = require('modOne')
twoModule = require('modTwo')

for i = 1, #Chapter do
    for j = 1, #Chapter[i] do
        print(Chapter[i][j])
    end
end

Код всегда читает переменную Chapter, которая находится в последнем загруженном модуле, но я хотел бы выбрать, какую Chapter я хочу напечатать. Я пытался получить доступ к переменной Chapter в каждом модуле, например, oneModule.Chapter[1][1] или twoModule.Chapter[2][1], но он возвращает ошибку.

1 Ответ

3 голосов
/ 06 января 2020

Примеры модулей, которые вы предоставляете, закодированы, чтобы ничего не добавлялось в возвращаемую таблицу.

В результате Chapter является глобальной переменной, которая создается первым модулем, а затем изменяется второй.

Чтобы исправить это, модули должны быть написаны так:

modOne:

local modOne = {
    Chapter = {
        [1] = {
            chapNum = 1,
            [1] = "This is the first verse of the modOne",
            [2] = "This is the second verse of the modOne",
        },
        [2] = {
            chapNum = 2,
            [1] = "This is the third verse of the modOne",
            [2] = "This is the fourth verse of the modOne",
        }
    }
}
return modOne

modTwo:

local modTwo = {
    Chapter = {
        [1] = {
            chapNum = 1,
            [1] = "This is the first verse of the modTwo",
            [2] = "This is the second verse of the modTwo",
        },
        [2] = {
            chapNum = 2,
            [1] = "This is the third verse of the modTwo",
            [2] = "This is the fourth verse of the modTwo",
        }
    }
}
return modTwo

Основной код:

oneModule = require('modOne')
twoModule = require('modTwo')

for i = 1, #oneModule.Chapter do
    for j = 1, #oneModule.Chapter[i] do
        print(oneModule.Chapter[i][j])
    end
end
for i = 1, #twoModule.Chapter do
    for j = 1, #twoModule.Chapter[i] do
        print(twoModule.Chapter[i][j])
    end
end

Вы также можете просто указать modOne.Chapter, когда определяете Chapter в модуле и везде, где вы используете его в модуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...