Очень страдаю от недружелюбия связки sublime+LOVE. Пробовал SublimeLinter-lua и LuaComplete. Стало лучше, но большая часть очевидных ошибок все равно не чекается
Перепутал название функции, вызываешь не импортированный модуль, обращаешься по индексу nil? Пока не запустишь и все не крашнется — не узнаешь.
ZeroBrane пробовал — он еще хуже
Поделитесь кто-нибудь секретами удобной разработки на LOVE?
- 18 мая 2019, 20:53
- 00
Так это же lua, так и задумано.
Это жестоко :-/
Если у тебя в рантайме какая-то ссылка станет nil, редактор в этом тебе никак не поможет.
Это же интерпретируемый язык, где можно в любой момент что-то загрузить и редактор заранее знать этого не может.
Ну вот WebStorm для такого же нетипизированного и интерпретируемого джаваскрипта как-то разруливает многие такие вещи. Например, предупреждая, если ты пытаешься использовать нигде не объявленные переменные/поля объектов.
Я как-то привык, что меня IDE за ручку водит, и теперь возвращаться к хардкору очень уж тяжело - за 2 недели так и не привык.
А зачем именно LOVE?
Кстати, да, для JS есть же Phaser
Потому, что выбрали Lua/LOVE для Гаминатора, эксперимента ради. И уже поздно отступать - вот и пытаюсь научиться его готовить и вообще полюбить
Для конкурсов надо выбирать только проверенные и наиболее удобные для тебя инструменты.
Все эксперименты с новым должны проводиться в свободное время между конкурсами.
Твой вариант - самый надежный способ провалиться или сделать забагованное чучело.
А мне норм экспериментировать в авральном режиме.
"Losing is fun"
Это - не "удобная разработка на LOVE", это "у разработчика склероз и невнимательность".
Чтобы не обращаться по нулевому указателю, проверяй на == nil.
Вообще перед использованием проверяй все на равенство nil, что может, вдруг, оказаться nil'ом.
Проверка на nil это правильно там, где это уместно. Если из геттера какого-нибудь может вернуться nil, например. Я говорю про случаи, когда чего-то в принципе нет - ты опечатался, или забыл, что оно не в глобальной области видимости, или перепутал 'table:method()' и 'table.method()' и попробовал получить self.
"Будь внимательнее" это, конечно, всегда хороший совет, но я немножко не о том.
Так это и есть тот же самый случай - self во втором случае будет равен nil. Если в глобальной области видимости не будет другого self.
Но знаешь, в этом случае лучше получить ошибку рантайма, чем сделать так что все будет работать, а ты потом будешь мучаться-разбираться где здесь ошибка.
Лучше получить ошибку рантайма и вылет, чем логическую - в первом случае относительно легко понять в чем причина. Благо LOVE довольно подробно и понятно объясняет что именно произошло, да еще и стек вызовов пишет, чтобы можно было понять откуда был вызван этот код.
Да, стектрейс действительно понятный и удобный, спасает.
Кстати, на данный момент мой любимый способ стрелять себя в ногу из Lua как раз через логическую ошибку, таким образом: я вызываю метод sometable:method(необязательныйАргумент) как sometable.method(необязательныйАргумент). И - сюрприз-сюрприз - self как будто бы присутствует, только в нем, по понятным причинам, присутствует какая-то дичь вместо того, что ожидалось. А перепутать точку и двоеточие не просто, а очень просто. И дебажить это бывает очень тяжко - как раз потому, что думаешь, что self на месте, аргумента может и не быть и ищешь проблему в другом.
В эти моменты очень скучаю по возможности сделать аргументы обязательными.
Да как-то не соглашусь. Они находятся не только на разных клавишах, но и в разных регистрах - для двоеточия нужно нажимать Shift. Ну или не использовать двоеточие вообще, ведь оно не обязательно.
В свое время все перепробовал, остановился на ZeroBrane. В одно время очень нравился Notepad++, с макросами.