Что значит в Lua иметь a, b = foo ()? - PullRequest
0 голосов
/ 16 декабря 2018

Я искал в Интернете и не могу найти объяснение этому.

Что означает следующее?

Local a,b = foo()

Почему две переменные?

Означает ли это также

Local a= foo()

И

Local b= foo()

Также?Или?

Может кто-нибудь привести примеры использования?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

В Lua функция может возвращать более одного значения.Например, эта функция возвращает два значения:

function returnThreeAndFive()
    return 3, 5
end

Вы можете загрузить результаты вызовов функций в переменные, используя описанный вами синтаксис.(Однако, если вы хотите, чтобы переменные были локальными, вы должны использовать строчную букву «l» для «локальной», а не прописную «L».)

local a, b = returnThreeAndFive()
print(a, b) -- Prints "3    5"

Если вы используете большепеременные, чем функция возвращает значения, тогда Lua заполняет их с помощью nil.

local a, b, c = returnThreeAndFive()
print(a, b, c) -- Prints "3    5    nil"

И наоборот, если функция возвращает больше значений, чем вы используете переменные, то вы только захватываете значения, которые вы ввелипеременные.

local a = returnThreeAndFive()
print(a) -- Prints "3"
0 голосов
/ 16 декабря 2018

Это означает, что foo возвращает два значения, и они входят в a и b!Итак, foo вызывается один раз, но два результата сохраняются в двух переменных.

См. https://www.lua.org/pil/5.1.html для дальнейшего ознакомления.

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

( a, b ) = foo()

Kotlin позволяетза это тоже.Они называют это разрушением.

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