Я нахожу правила обзора Луа немного запутанными. Ниже я представил фрагмент сценария Lua, чтобы выделить проблемы, о которых я хочу задать вопрос (ы):
-- 'forward definitions'
-- could these be moved to the bottom of the script to 'tidy up' the script?
-- could these reside in another file imported by require 'filename' to tidy up the script even more?
[[ Note: This function is accessing variables defined later on/elsewhere in the script
and is also setting a variable (flag) which is then used elsewhere in the script
]]
function war_is_needed()
if (goodwill:extendsToAllMen() and peace) then
if player:isAppointedLeader() then
economy_is_booming = false
return true
else
economy_is_booming = nil
return true
end
else
economy_is_booming = nil
return false
end
end
world = WorldFactory:new('rock#3')
player = PlayerFactory:getUser('barney', world)
while (not player:isDead()) do
peace = world:hasPeace()
goodwill = world:getGoodwillInfo()
if war_is_needed() then
world:goToWar()
else
if (not economy_is_booming) then
player:setNervousState(true)
player:tryToStartAWar()
else
player:setNervousState(false)
player:liveFrivously()
end if
end
end
Мои вопросы (на данный момент игнорируя, что глобальные переменные МОГУТ считаться злыми):
- Может ли функция в верхней части сценария быть перемещена в нижнюю часть сценария, чтобы "привести в порядок" сценарий?
- Может ли функция в верхней части скрипта быть реорганизована (т.е. перемещена) в отдельный файл 'warfuncs.lua', а затем импортирована в скрипт, заменив определение функции требованием 'warfuncs.lua'?
Отвечая на два вышеупомянутых вопроса, имейте в виду, что функция в верхней части скрипта получает доступ к переменным, определенным позже / в другом месте скрипта.
а также устанавливает переменную (флаг), которая затем используется в другом месте скрипта.
Изменяются ли правила области видимости, если Lua встроен в C или C ++ (где объекты могут создаваться в куче)?