Как назначить элемент в определении таблицы другому элементу в той же таблице? - PullRequest
0 голосов
/ 30 марта 2019

Я пытался присвоить элемент в определении таблицы в фигурных скобках другому элементу, который был определен ранее. Но Луа говорит, что не может найти саму таблицу, однажды ссылаясь на нее в своем определении.

Вот пример того, чего я пытаюсь достичь:

local t = {
    a = 1,
    b = 2,
    c = t.a + t.b
}

При приближении к t.a Луа не сможет найти t и ответит с ошибкой.

Как я могу ссылаться на t.a и t.b при определении c в t , не выходя из определения фигурной скобки ?

Ответы [ 2 ]

3 голосов
/ 30 марта 2019

Как указано в вашем вопросе, вы не можете.

" Порядок присваиваний в конструкторе не определен ."

Таким образом, «определенный ранее» не является концепцией в конструкторе таблицы.

Кроме того, " Оператор присваивания сначала оценивает все его выражения, и только после этого присваивания выполняются ."

И, " Область действия локальной переменной начинается с первого оператора после ее объявления ".

Таким образом, на локальную переменную t, показанную в вашем коде до конца оператора, нельзя ссылаться. t будет привязан к ранее объявленной переменной или глобальному имени t.

3 голосов
/ 30 марта 2019

неудобно, но:

local t
do
    local a = 1
    local b = 2

    t = {a, b, c = a + b}           
end

print(t.c) -- 3

Без блока do/end переменные a и b будут видны за пределами t.

Насколько мне известно, прямого пути к a и b нет, если только 1) эти переменные не существуют заранее (приведенный выше пример) или 2) после завершения построения таблицы.

...