Перейти к публикации
Форум - ComputerCraft
  • 0
FelixBanan

Локальные переменные не работают

Вопрос

Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать. Может я очень тупой и что то не правильно сделал но не работает.

Изменено пользователем Alex
много грязи и мата

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать.

Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы.

 

Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п.

Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить.

*Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. :(*

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п.

Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить.

*Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. :(*

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

Окей. Мне всегда хватало ОЗУ. Я не думаю что глобальные переменные будут жрать  сотни кб памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

возможно будут не совсем корректен, но я постараюсь

 

глобальные переменные видны на всей программе, а локальные только в той конструкции, в которой объявлены и тем, которые происходят внутри конструкции, в которой объявлена переменная(цикл, условие, функция и т.п.)

 

область видимости обзывается вроде

https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8

 

локальные пошустрее будут

Изменено пользователем ivan52945
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы.Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их.
разжевано просто полностью =) спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Глобальные переменные не совсем зло.

После ковырянии в сишной луа(пишу эмулятор), на самом деле практически для каждой операции, создание чего либо - вызывается аллокатор и реалоцирует размер выделенной области. Тобишь, хочешь увеличить таблицу, вызывается аллокатор, а в нем уже расширения выделенной области, а это затратно, если в конце не хватает свободного места - то участок полностью копируется и переносится в область требуемой размером. Если интересно, могу позже выложить лог с тем как требует память луа при загрузке базовой библиотеке.

Изменено пользователем NEO
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×