Функции не передаются переменным; им передаются значения . Переменные - это просто местоположения, которые хранят значения.
Когда вы говорите X
где-то в вашем коде Lua, это означает, что значение можно получить из переменной X
(примечание: на самом деле это сложнее, но я не буду вдаваться что здесь).
Поэтому, когда вы говорите test(X)
, вы говорите: «Получите значение из переменной X
и передайте это значение в качестве первого параметра функции test
.»
Похоже, вы хотите изменить содержимое X
, верно? Вы хотите, чтобы функция test
каким-то образом изменила X
. Ну, ты не можешь сделать это прямо в Lua. И вам не следует.
Смотрите, в Lua вы можете возвращать значения из функций. И вы можете вернуть несколько значений. Даже из кода C ++ вы можете вернуть несколько значений. Поэтому все, что вы хотели сохранить в X
, можно просто вернуть:
X = test(X)
Таким образом, вызывающая сторона функции решает, что делать со значением, а не с самой функцией. Если вызывающая сторона хочет изменить переменную, это нормально. Если звонящий хочет вставить его куда-то еще, это тоже хорошо. Ваша функция не должна заботиться о , так или иначе.
Кроме того, это позволяет пользователю выполнять такие действия, как test(5)
. Здесь - это без переменных; вы просто передаете значение напрямую. Это одна из причин, почему функции не могут изменить передаваемую «переменную»; потому что не имеет переменной. Передаются только значения, поэтому пользователь может просто передать буквальное значение, а не значение, хранящееся в переменной.
Короче говоря: вы не можете это сделать, и вы не должны этого хотеть.