Вопрос по НоутПад++ |
Здравствуйте, гость ( Вход | Регистрация )
Вопрос по НоутПад++ |
9.5.2009, 14:22
Сообщение
#1
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Вопрос: закрываю ноутпад - функции свернуты (см.картинку)... Открываю - опять зараза все развернуты. Как это можно побороть?
Прикрепленные файлы
|
|
|
9.5.2009, 16:52
Сообщение
#2
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Побороть никак. Данная фишка сделана для удобства только на время разработки.
|
|
|
9.5.2009, 16:59
Сообщение
#3
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Жаль... глючит иногда, перезапускать приходится. И ресурса с памятью (на откатах видимо) много кушать начинает. Но все равно спасибо, теперь хоть ясность есть.
|
|
|
9.5.2009, 17:06
Сообщение
#4
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хм... Глючит? Это странно. У меня за всю работу никогда не глючил.
Попробуй обновить версию. Лично я ставлю ansi версию, так как под юникод нет плагина FunctionList, который очень удобен. С данным плагином и не нужно свёртывать функции, просто щёлкнул по нужной, и курсор установился на начало это функции |
|
|
9.5.2009, 19:44
Сообщение
#5
|
|
Продвинутый участник Группа: Пользователи Сообщений: 177 Регистрация: 20.5.2008 Пользователь №: 5 Спасибо сказали: 26 раз |
|
|
|
9.5.2009, 20:07
Сообщение
#6
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
|
|
|
9.5.2009, 22:01
Сообщение
#7
|
|
Продвинутый участник Группа: Пользователи Сообщений: 177 Регистрация: 20.5.2008 Пользователь №: 5 Спасибо сказали: 26 раз |
|
|
|
9.5.2009, 23:19
Сообщение
#8
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Вот зачем выкладывать хрен знает куда? Там же срок хранения есть... Прилагаю.
Прикрепленные файлы
|
|
|
10.5.2009, 11:05
Сообщение
#9
|
|
Продвинутый участник Группа: Пользователи Сообщений: 177 Регистрация: 20.5.2008 Пользователь №: 5 Спасибо сказали: 26 раз |
виноват, не подумал
|
|
|
10.5.2009, 15:19
Сообщение
#10
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Тоже хочу пять копеечек внести. Оказалось, у меня НоутПад 4.7.2 (рус). Пробовал подключить FunctionList 2 Alfa - не пошло. Порылся, нашел дллку 1.2 версии, подключил, все замечательно. Очень удобная и полезная фича. Прикреплю ее тут на всякий случай.
Когда ботик строк так на 50, то может и ничего, а вот когда под 3000 - вот тут очень много времени тратится на шарахания в поисках нужного места в коде. Тут-то плагин и выручает.
Прикрепленные файлы
|
|
|
10.5.2009, 15:56
Сообщение
#11
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
3000 строк - это жёстко. Подобного рода коды просто необходимо дробить на файлы, чтобы самому же не запутаться
А вообще, советую любой достаточно большой проект дробить на файлы по функциональности того или иного класса выполняемых задач. Дробление на файлы - это хороший тон программирования. |
|
|
10.5.2009, 17:39
Сообщение
#12
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Так я не против разделения (дробления), кое-что уже научился делать - подключать модули способом dofile... Просто, как написано в одной мудрой книге, "Есть время разбрасывать камни, а есть время их собирать". Вот соберем все в кучу, осмыслим, что получилось, а там и подробить можно будет.
... вот кстати и вопрос сразу же, по теме. Есть несколько подключаемых модулей. В настройках выбирается, использовать тот или другой. Соответственно, они вызываюся при старте скрипта или не вызываются. А как быть с совершенно невообразимой длины ChatArrival ? Как его функционально разделить, возможно ли это? Пока что в нем предусмотрена отработка команд для всех возможных модулей, т е ChatArrival единый и неделимый. ... а впрочем чуть подумав уже раскидал. Получился центральный модуль, около 1500 строк, там в основном ChatArrival, Main, таблицы под генерацию "матричного" меню с невообразимым количеством возможных команд, да функции вспомогательные для формирования и вывода отчетности. И семь подключаемых модулей, разбитых по функциональной принадлежности... Переменные локальные в центральном модуле большей частью пришлось на глобальные переделать - а как же, без них модули работать отказываются ;) В общем, мне это нравится |
|
|
10.5.2009, 21:50
Сообщение
#13
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ты на верном пути. Вот только размышления не совсем верные. Нужно написать систему плагинов, которая будет подключать тот или иной модуль, и выполнять ту или иную функцию из модуля, отвечающую за то или иное действие. Центральный модуль должен содержать минимум строк для того, чтобы его можно было легко переписать под работу на другом api или вовсе под другой хаб (со своим api). Также стоит выделить отдельно модуль отсылок сообщений, модуль api функций, модуль хранилища информации (файлы или бд), модуль протокола, модуль утилит, модуль конфигурации, модуль-дебагер, модуль запросов, модуль обработки команд ну и тд. и тп. Тут дел много. Да и вот ещё... Нужно всякими способами избегать использование глобальных переменных, так как обращение к локальным переменным происходит быстрее.
Именно модульная система позволяет с минимальными затратами (переписав всего лишь пару модулей) адаптировать скрипт под работу на другом протоколе, или на другом хабе, или под другой api, или с другим типом хранения информации и тп. Несколько слов про подключение модулей (как избежать использование глобальных переменных). Пример: Допустим у нас есть какой-то основной файл скрипта test.lua и файл модуля module.lua (файлы находятся в одной папке) test.lua Код local sMainPath = debug.getinfo(1).source:match("^@(.+[/\\]).-$"):gsub('\\','/') package.path = sMainPath.."?.lua;"..package.path local mObj = require"module" function ChatArrival(tUser, sData) local sBot = sData:match"%b<> !setbot%s+(%S+)|" if sBot then mObj:SetBot(sBot) Core.SendToUser(tUser, ("<%s> Новый бот установлен"):format(mObj:GetBot())) end end module.lua Код do local sBot = "Бот" return { SetBot = function(self, _sBot) sBot = _sBot end; GetBot = function(self) return sBot end; } end Хочу заметить, что существует 2 вида подключения модулей dofile и require. Тут предложен второй. Различия между ними: 1) dofile загружает любые файлы по указанному пути, require загружает только lua или dll файлы (lua файлы ищутся в директориях, которые содержатся в переменной package.path (можешь вывести эту переменной и посмотреть содержимое - это строковая переменная), в этой переменной все пути разделены знаком ; а на место вопроса подставляется название модуля. Файлы dll загружаются по путям переменной package.cpath) 2) dofile загружает файл каждый раз при использовании, require загружает только один раз при первом обращении к этому файлу, при остальных обращениях используется старая загрузка. То есть можно сказать, что dofile передает параметры по значения, а require передаёт параметры по ссылке. Именно из-за второго пункта можно в 10 местах (файлах) написать local mObj = require"module", однако локальная переменная local sBot будет принимать последнее значение, которое мы ей установили методом SetBot. Вот я изложил кратко принцип загрузки и избавления от локальных переменных (принцип инкапсуляции). А вообще по хорошему надо использовать классы, но об этом говорить я думаю (в данной ситуации) пока рано |
|
|
11.5.2009, 2:51
Сообщение
#14
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата 2) dofile загружает файл каждый раз при использовании, require загружает только один раз при первом обращении к этому файлу, при остальных обращениях используется старая загрузка. Вот это ценная информация, над ней надо в первую очередь подумать. Это ж как говорил Портос, безумное расточительство, загружать каждый раз при каждом обращении (!) например какую-нибудь постоянную, неизменную таблицу. Цитата об этом говорить я думаю (в данной ситуации) пока рано Это точно, сразу замахиваться на шедевр и стремиться утереть нос индусам-программерам тоже пока рановато |
|
|
6.7.2009, 12:49
Сообщение
#15
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Нечаянно наткнулся на ту фишку, с поиска которой начался топик. Сочетание Alt+1 сворачивает все функции... Теперь ищу сочетание, которое разворачивает их обратно
Может все-таки быть альтернативой плагину, иногда. Он как-никак занимает часть экрана, а это не всегда удобно ( приходится включать перенос строк), да и функции искать глазами иногда удобнее не в вынесенном списке, а "вживую" . Попутно наткнулся на очень замечательную фишку дублирования строки, на которой установлен курсор : Clrl+D |
|
|
6.7.2009, 19:09
Сообщение
#16
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хехе.
Этих открытий можно было и не делать, а просто посмотреть список горячих клавиш (меню Опции -> Горячие клавиши) Кстати, там можно устанавливать свои собственные горячие клавиши Например, удобно установить горячую клавишу на действие "копировать имя файла в буфер обмена". Я для себя установил клавишу F5 - запуск приложения из командной строки, F9 - скомпилировать lua код |
|
|
7.7.2009, 3:16
Сообщение
#17
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Setuper
Ну дык, было бы время детально прогу изучить - и вопросов бы не было )) Тогда еще пара вопросов. 1.Вот сместить ( табулировать ) выделенный кусок кода вправо - это понятно как, а вот влево - бывает такое ? Если да, то как это делается ? 2.Что означает "скомпилировать Lua-код"? |
|
|
7.7.2009, 12:35
Сообщение
#18
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А зачем влево? Есть настройка табулирования. Я себе установил, чтобы табуляция заменялась двумя пробелами - это распространённое действие.
Скомпилированный lua код - это означает использование luac для получения бинарного файла из обычного текстового. |
|
|
7.7.2009, 13:22
Сообщение
#19
|
|
Постоялец Группа: Пользователи Сообщений: 454 Регистрация: 17.10.2008 Из: Новосибирск Пользователь №: 825 Спасибо сказали: 90 раз |
Цитата А зачем влево? Чтобы красиво было, и было удобно читать. Чтобы for, if и т д падали четко на end. С первого раза ведь никогда не получится все по ступенькам расставить, приходится двигать куски кода вправо-влево. |
|
|
7.7.2009, 14:08
Сообщение
#20
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хм... не знаю что ты там двигаешь, у меня всегда все нормально получается.
Просто нужно настроить табуляцию на замену двумя пробелами. |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 1:16 |