Строка в функции может попасть на ту же самую область памяти, что и при предыдущем вызове. И в ней может оказаться старая информация.
Это наверное рассказ про стек..
Вообще-то, всегда надо полагать, что в новой переменной содержится случайная информация, и из элементарных гигиенических соображений, новые переменные надо инициализировать.
Переменная инициализируется вверху функции.
Некоторые языки программирования инициализируют переменные и в соответствии с типом сами задают им начальные значения типа:
int = 0,
string = "",
boolean = false
и т.д.
Но скрипты готики не предназначены для программирования, они служат лишь начинкой проекта или самой главной движемой частью проекта, с уже заранее заготовленными функциями.
Тем более разработчики делали его не под кого-то, а чисто под своих людей, отсюда и отсутствие циклов, статичность некоторых важным мест и т.д. недостатки(для модостроителей).
И ещё.. Я хотел узнать причину такой неудачной организации работы скриптовых функций, а не то, как решить проблему. Я как бы уже написал, что достаточно сбросить значение после объявления переменной, чтобы всё работало нормально. Было предположение: толи это Соурсер не правильно работает, толи сам движёк не доделан как надо.
А номер два - использование конкатенации там, где достаточно обычного присвоения.
Да нет же! Я написал в качестве примера. Вы чё как инспекторы контроля кода - придираетесь ко всяким мелочам?
Где надо, я сам поправлю... Я мог ещё несколькими способами написать вывод информации о переменной, например, просто прописать в начале функции вывод значения переменной text через тот же самый принт, а ниже присвоить значение и вызвать 2 раза и т.д.
выгружаться должна по определению. это закон программирования, так как переменная объявлена локально внутри функции.
Это более-менее нормальный ответ, который о чём-то говорит.
Скажу даже больше, то, что на этом методе основана работа с функциями и стеком.
Покопавшись в сети удалось найти кое-какую информацию...
Т.к. переменные объявлены внутри функции, они считаются локальными.
Локальными переменными, потому что их имена и значения имеют смысл только внутри функций, в которых они определены. Это означает, что их значения и существование известны только для функции, внутри которой они объявлены.
При вызове функции, программа сохраняет в стеке адрес возврата, параметры и локальные переменные. При завершении функции программа выталкивает из стека значения локальных переменных и параметров и затем использует адрес возврата для продолжения выполнения программы с нужного места. Обеспечивая вызов в программе функции с передачей ей информации, механизм использования стека в то же время расходует дополнительное время на обработку. Количество времени, затрачиваемого на сохранение информации в стеке (вталкивание) и освобождение информации из стека (выталкивание), представляет накладные расходы выполнения функции.
Вталкивание - это добавление, а выталкивание - это удаление из стека.
Даже от сюда можно сделать вывод, что при завершении функции, все переменные, что были локальными внутри функции - должны были удалиться из стека, чего и не произошло в скриптах.
Далее..
При каждом вызове функции для размещения локальных переменных, программа выделяет пространство в стеке. При завершении функции пространство стека, содержащее значения этих переменных,
освобождается. Какое бы количество локальных переменных ни объявлялось в функции, программа сохраняет в стеке значение каждой из них.
При завершении выполнения функции стек
освобождается, а следовательно,
пропадают и изменения, сделанные функцией в ячейках стека.
ВЫВОД - программа не выгружает из стека значения локальных переменных, которые использовались в функции. Как-то так.
George_M, у тебя не хватает корневых классов и некоторых переменных, а мб и констант, на которых основана работа всех тех функций. Ищи всё это там, где и нашёл код...
Они мб скоро научатся писать вредоносный код через скрипты готики?