bash.im ithappens.me zadolba.li
7968

Ни дня без развлечений

7 декабря 2011, 10:00

Я до сих пор не понимаю, что это было, но оно скрасило бессонную ночь и научило меня иначе относиться к игровым конструкторам.

Было дело, писал скрипт по закачке игровых ресурсов в оперативную память по списку. В числе прочего в коде присутствовал скрипт по чтению списка ресурсов из INI-файла. В стандартной библиотеке конструктора функция, читающая переменные в секциях инишника, была, и я решил использовать её, дабы не писать лишний код.

Алгоритм протестирован, выдаёт верные результаты. Остаётся скромный допилинг до практически готового скрипта. Добавляю функцию из стандартной библиотеки, запускаю программу в режиме отладки… Окно «Unexpected error occured» вместо правильных результатов. Проверяю циклы, исключаю возможность бесконечной рекурсии, тестирую заново — то же самое.
Строчку кода, добавленную перед последним тестом, нафиг в комментарий:

// output = ini_read_string('res', string(global.resource_files[argument0]), '');

Та-дам! Алгоритм работает. Синтаксис верный, типы параметров совпадают — что неладно? Убираю комментарий, заменяю функцию, передающую в параметр строку, простой строкой вида:

output = ini_read_string('res', 'untitled.jpg', '');

Всё работает на ура. Думаю, вы уже догадались, в чём дело? Функция из стандартной библиотеки принимает в качестве параметра строку и работает с ней без проблем, а с функцией, передающей абсолютно идентичную строку в параметр, вылетает, выдавая неопознанную ошибку.

Спасибо вам, дорогие индусы-разработчики! Без вас было бы так скучно!