зачем lua нужны локальные функции ?
local zTesterLocation = Location(0,0)
local getTerrainZ = function(x,y)
	MoveLocation(zTesterLocation, x, y)
	return GetLocationZ(zTesterLocation)
end
смотрите локалки можно создать где угодно, и работают внутри блока, типа
do
	local a = 1
	--body
end

function(arguments)
	local a = 0
end

if ... then
	local a = 1
	--body
end

while .. do
	local = 0.5
	--body
end
А если я создам функцию не внутри блока, а отдельно. Будут ли локалка работать там?
Пример, я локалку создаю в Init, хочу ее использовать в ABC. Но не получится. В справочнике говорится, что если она не инициирована как local, то будет глобалка. Получается что в ABC уже другая переменная.
function ABC()
	a = a^2
	print(a)
	return a
end

function Init()
	local a = 5
	local f = ABC()
	print("было: "..a.."стало: "..f)
end
так совсем не работает. конечно не будет. Пробовал запихать внутрь функции функции. тоже не работает
function Init()
	local a = 5
	local f = function ABC()
		a = a^2
		print(a)
		return a
	end
	
	print("было: "..a.."стало: "..f)
end
просто код большой. И нужно разбивать на части.
тогда надо одни глобалки юзать. Нафик локалки))
проверял вот здесь и игре

Принятый ответ

Для того же, для чего и локальные переменные - ограничить область видимости (а зачастую и время жизни) объекта текущим блоком кода
Код
function MyFunc()
    local a = 10

    local function InnerFunc()
        print(a)
    end
end
Переменная a внутри функции MyFunc объявлена локальной. следовательно, доступ к этой переменной возможен только внутри этой функции. Так как функция InnerFunc так же определена внутри функции MyFunc, она имеет доступ к локальной переменной a.
Поскольку функция InnerFunc так же как и переменная a объявлена локальной, доступ к этой функции возможен только внутри тела функции MyFunc.
При это, функция InnerFunc, конкретно в данном примере, как и переменная a, будучи локальной, существует только до тех пор, пока выполняется код объемлющей функции. То есть, она прекратит свое существование, в момент выхода из функции MyFunc
Но, что важно, если мы уберем слово local при объявлении функции InnerFunc
Код
function MyFunc()
    local a = 10

    function InnerFunc()
        print(a)
    end
end
то внутри тела функции MyFunc мы создаем глобальную функцию с именем InnerFunc. То есть, если до момента вызова функции MyFunc в глобальной области видимости не существовало чего-либо с именем InnerFunc, то оно будет создаваться и назначаться (переназначаться) с каждым вызовом MyFunc.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
5
3 года назад
0
function Init()
	local a = 5
	local f = function()
		a = a^2
		print(a)
		return a
	end

	b = f()
	
	print("было: "..a.."стало: "..b)
end
0
27
3 года назад
0
ZLOY5, онлайн интерпретатор не работает. ладно надо смотреть в игре
0
24
3 года назад
0
Рекомендую пойти найти в сети туториал по основам луа. Иначе можно до бесконечности задавать глупые вопросы и получать еще более глупые ответы на них.
3
17
3 года назад
3
Для того же, для чего и локальные переменные - ограничить область видимости (а зачастую и время жизни) объекта текущим блоком кода
Код
function MyFunc()
    local a = 10

    local function InnerFunc()
        print(a)
    end
end
Переменная a внутри функции MyFunc объявлена локальной. следовательно, доступ к этой переменной возможен только внутри этой функции. Так как функция InnerFunc так же определена внутри функции MyFunc, она имеет доступ к локальной переменной a.
Поскольку функция InnerFunc так же как и переменная a объявлена локальной, доступ к этой функции возможен только внутри тела функции MyFunc.
При это, функция InnerFunc, конкретно в данном примере, как и переменная a, будучи локальной, существует только до тех пор, пока выполняется код объемлющей функции. То есть, она прекратит свое существование, в момент выхода из функции MyFunc
Но, что важно, если мы уберем слово local при объявлении функции InnerFunc
Код
function MyFunc()
    local a = 10

    function InnerFunc()
        print(a)
    end
end
то внутри тела функции MyFunc мы создаем глобальную функцию с именем InnerFunc. То есть, если до момента вызова функции MyFunc в глобальной области видимости не существовало чего-либо с именем InnerFunc, то оно будет создаваться и назначаться (переназначаться) с каждым вызовом MyFunc.
Принятый ответ
0
27
3 года назад
Отредактирован MpW
0
prog, в сети можно получить, но зачастую посылают учить матчасть. Где уже все изучено здесь
GetLocalPlayer, а если я создаем локалки в процессе инициализации код, они будут существовать всю игру. Или только существуют в процессе инициализации? И уже перестанут существовать? пример локалка Table?
do -- создаём область видимости, чтоб не конфликтовать с другим кодом
    local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals

	function InitGlobals()
		InitGlobalsOrigin()
			local Table = { {},{},{} } 
		
	end
end

ps просто че то не выполняется правильно. Поэтому ищу причину.
1
17
3 года назад
Отредактирован GetLocalPlayer
1
а если я создаем локалки в процессе инициализации код, они будут существовать всю игру. Или только существуют в процессе инициализации? И уже перестанут существовать?
Блок кода do/end разделяет те же правила. То есть
Код
do
    local a = 10 -- Локальная переменная внутри блока do/end
end
-- Блок кода завершен, локальной переменной "a" больше не существует.
Я распишу твой пример
Код
do -- создаём область видимости, чтоб не конфликтовать с другим кодом
    local InitGlobalsOrigin = InitGlobals -- хукаем функцию InitGlobals
    -- Переменная InitGlobalsOrigin является локальной и существует
    -- только внутри текущего do/end блока
    function InitGlobals() -- объявляется глобальной и заменяет собой оригинальный InitGlobal
        InitGlobalsOrigin() -- переменная InitGlobalsOrigin продолжает существование внутри текущей функции
        local Table = { {},{},{} } -- локальная таблица, которая существует в передлах текущей функции
    end
    -- Конец функции, здесь Table уже нет.
end
-- Конец блока, локальной переменной InitGlobalsOrigin здесь не существует.
-- Однако, она продолжает свое существование внутри той InitGlobals функции,
-- которая была объявлена внутри do/end блока
0
27
3 года назад
0
GetLocalPlayer, спасибо за помощь))
понял в чем ошибка, опять не все перенес. И из-за этого обрываются действия/потоки. И мне нужно print везде чекать от начала и до.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.