Re: Как добавить метод к пользовательскому объекту | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Ты хочешь сказать, что заранее нельзя предвидеть, из какого процедурного файла будет вызвана одноименная функция в варианте:
Ведь есть же вполне определенные правила, по которым Фокс ищет вызываемую функцию: - сначала пытается найти ее в том же самом PRG, что и вызывающая; - затем - в подключенных с помощью SET PROCEDURE "библиотеках", причем, если их несколько, то в порядке "слева направо" если смотреть на строку, возвращаемую SET('PROCEDURE'); - и так далее. Поэтому, если порядок, получаемый по
тебя не устраивает, то несложно добавить proclib2 перед proclib1:
Исчезла надобность в функциях из proclib2 - отключаем ее:
PS А в целом, ты меня "запутал". Начал с того, что SET PROC prg1 ADDITIVE тебе, якобы, мешала вызывать одноименные функции фреймворка (я так понял). А позже выяснилось, что функции prg1 и должны были иметь более высокий приоритет. Тогда требовалось лишь подключить prg1 в начало списка подключенных процедур, и все - можно вызывать функции prg1 "как функции". Исправлено 4 раз(а). Последнее : akvvohinc, 27.04.17 22:28 |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Можно воспользоваться гарантией от VFP, что первее, та которая левее в списке от SET('PROCEDURE'), мне показалось это чересчур уж зависимой от какой то "макро" зависимости (на самом деле, я даже не предполагал такого использования возврата от SET('PROCEDURE') Ты первый открыл такой макрос? Сам придумал только что, или давно использовал?
> функции prg1 и должны были иметь более высокий приоритет > Тогда требовалось лишь подключить prg1 в начало списка подключенных процедур, и все - можно вызывать функции "как функции". Зря ты пристал к этому SET PROCEDURE, не только в нем счастье. Я уже говорил - недостаток его глобальный - подключаются ВСЕ процедуры этого файла в общее поле зрения. Это надо не всегда. Путь обхода этого свойства - DO proc IN pror1.prg. Нюансы разруливания одноименных процедур фреймверка и DO IN ты уже назвал неоднократно, но, видно выбранный вариант понимания/использования не сложил в систему, и не вшил в генетический код программы и в себя ) |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Как обычно: сначала создаем себе проблемы, потом героически их преодолеваем и сетуем, что разрабы фокса не создали средства обхода нами придуманных проблем. Зачем пихать не всегда нужные модули в один файл? Что мешает их разложить по файлам в соответствии с их нужностью? Боимся за разрастающийся список в set procedure? ------------------ Лень - это неосознанная мудрость. |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Видимо имелось в виду что можно вообще "забыть" отключить эту prg (и "всё пропало"), либо же она такая хитрая, что в какой-то момент отдаёт управление "внешним" функциям, а они (т.к. ещё не было отключения prg1 - и это логично/правильно) начав вызывать всякие funcN попадут во "временно подключенный prg1".
В общем ересь всё это. "Суета сует и томление духа" - а всё от того что процедурный подход в общем случае не имеет адекватных механизмов разграничения для "одноимённых" процедур. Т.е. по сути ОБЯЗЫВАЕТ использовать абсолютно уникальные имена процедур в рамках ВСЕЙ системы (естественно, это крайне затруднительно обеспечить в большом проекте с использованием "чужого" кода). Да не, они "нужные". Только называются DoWork() - и так во всех 100500 процедурных файлах Вот в каждом фоксовом классе есть метод-обработчик Init. Но Init одного класса никак не мешает и не пересекается с Init другого. А с процедурами это по большому счёту нельзя реализовать. Ну да, частично решает "вместо подключения использовать DO ... IN ...". Но полностью эту проблему может решить только уникальное именование ВСЕХ процедур в проекте - что IMHO крайне сложно реализуемо в мало-мальски большом приложении. ------------------ WBR, Igor |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Сергей, чего мы боимся? ...
> Зачем пихать не всегда нужные модули в один файл? Что мешает их разложить по файлам в соответствии с их нужностью? Боимся за разрастающийся список в set procedure? > подключаются ВСЕ процедуры этого файла в общее поле зрения Мне сделать 100 файлов, в разных категориях нужности ? 1000 процедур. В 10тке файлов PRG. Все нужны. Зря процедуры не делаюются, или делаются, но не запросто переделываются. И что? Это разложение поможет мне свободно подключить процедуру дворника дяди Васи в рантайме проги? Или свободно исполнить программу "Уборко" в модуле:
|
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Игорь, наверняка и ты это просчитываешь, когда добавляешь PUBLIC-переменную, или в goApp свою ссылку, переменную, метод, PROCEDURE-функцию:
> Т.е. по сути ОБЯЗЫВАЕТ использовать абсолютно уникальные имена процедур в рамках ВСЕЙ системы (естественно, это крайне затруднительно обеспечить в большом проекте с использованием "чужого" кода). |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Дело в том что классов на порядок меньше чем процедур (т.к. класс это и есть 10-20 процедур "в одном флаконе"). Поэтому управится с ними гораздо проще.
Да, если разраб дурак, тут ничего не поможет - он так же замечательно соорудит 100 одноимённых классов, подключит их все через SET CLASS и будет потом вопрошать "а чего это оно так странно работает"... Даже в дотнете, где поверх имени класса есть ещё и namespace (откуда у классов и получаются такие "километровые" полные имена System.Windows.Forms.Textbox) - чтобы ну уж совсем избежать проблемы "одноимённых сущностей". Да ещё и сам компилятор следит за "возмножной неоднозначностью" при разрешении имени... Идиоты умудряются выстрелить себе в ногу. Что уж говорить про фокс, где вообще контроля по сути никакого... P.S. Именно это лично я считаю НАИХУДШЕЙ из возможностей фокса. Дать элементарную возможность выполнять абсолютно произвольный код, абы кем и абы как написанный... ------------------ WBR, Igor |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
"свободно подключить процедуру дворника дяди Васи" - это нормально, и далеко не наихудшая возможность фокса, скорее приятная
> получаются такие "километровые" полные имена System.Windows.Forms.Textbox в шарпе, в фрейверке его, наплодили этой иерархичности, что ... мата не хватает. С таким же успехом я себе написал бы нужных мне компонентов, чем выучить ихний набор функций > классов на порядок меньше чем процедур Игорь, классов, например с 100, в каждом по 10ку всяких функций (ВИДИМЫХ) - это ужасно, но таковы реалии. Ни одну "функцию" не выкинуть, она типа "нужна" людям. Посмотри листочек за любой месяц оплаты за проживание в квартире - там куча чисел, в проге - там еще на порядок больше чисел/человека, отчетность - еще на порядок больще... |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Мда... Надо бы усилить эту сентенцию: "если ты дурак, иди в разрабы" |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
В разрабы идут, кому это положено, всякое го..но разрабатывать, авто всякие, которыми все засирают город, ракеты, заряды, которыми люди швыряюится друг в друга. Дело нехорошее, явно. Вобще, цивилизация резко скакнула "вперед" в технике, в физике, первые, кстати, были математики (Лаградж, Гамильтон, современные Гильберт (это фактически соавтор ОТО), Риман, Пуанкаре (Анри, и брат еще у него математик))... Отскок, наверное, будет, ну, типа скученность в городах, болезни, рак, психи, терроризм. Что-то может другое придумают, стартаперы, кроме доставки на дом, например "герыча", чем-то другим озаботятся...
... Игорь навеял, без поллитры, де, или герыча, он чужой код разбирать не согласен... ) |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Думаю, этот "макрос" многие открывали для себя сами и независимо друг от друга. А вот то, что я открыл не сам, а где-то подсмотрел в свое время, было гораздо менее очевидно: в FPD не было возможности подцепить несколько процедурных файлов командой SET PROCEDURE. А потребность в чем-то подобном имелась - например, один такой процедурный файл имелся во "фреймворке", а другой (другие) - в каждом приложении. Вот все процедурные файлы, начиная со второго (первый подключался по SET PROC), "грузились" в память по такой схеме "холостого цикла": main вызывала proclib1('proclib2, proclib3, main01') proclib1 вызывал процедуру, переданную первой в списке, передавая ей остаток параметра - proclib2('proclib3, main01') proclib2 вызывал процедуру, переданную первой в списке, передавая ей остаток параметра - proclib3('main01') А вызываемая в конце main01 - это процедура головной программы main, с которой следовало продолжить ее работу. При этом все процедуры/функции всех процедурных файлов - proclib1, proclib2 и proclib3 становились постоянно доступны всему приложению, так как все эти процедуры в результате такого циклического вызова: main -> proclib1 -> proclib2 -> proclib3 -> main не были завершены по RETURN. Исправлено 1 раз(а). Последнее : akvvohinc, 28.04.17 01:03 |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
т.е не было, или была неизвестна, якобы, опция ADDITIVE при SET PROCEDURE, а также предзнание алгоритма искалки фокса процедур. Ну и нормально, Сергей. Решил, получилось, и это достойно уважения, если прога работает.
|
Re: Как добавить метод к пользовательскому объекту | |
---|---|
akvvohinc Автор Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата: В DOSе синтаксис был таким:
то есть, никаких тебе списков, никаких ADDITIVE. Что же касается "предзнания алгоритма искалки фокса процедур", то как ты выполнишь функцию "как функцию" из не подключенного процедурного файла? Этот файл должен быть уже загружен, что показанный "холостой цикл" и обеспечивал. Исправлено 1 раз(а). Последнее : akvvohinc, 28.04.17 02:32 |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
Да, круто. |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
Как использовать Redefine и в чём его принципиальный смысл? Можно какой либо пример. |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
Как это сделать, можно пример? |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
А это прокатывает? |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
Как это? |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
AdamAry Сообщений: 843 Дата регистрации: 14.12.2015 |
Да не они "нужные" и
имеют противоположный смысл. Я уверен что
Исправлено 3 раз(а). Последнее : AdamAry, 28.04.17 09:22 |
Re: Как добавить метод к пользовательскому объекту | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Вот собственно, из-за чего весь спор. Коли кто то делает так, и не хочет иначе, его дело. Но показать другим, что так делать не следует. Это вовсе не круто. Это всего лишь первый камень в программу. Накидать таких можно много. И при таком стиле, их кол-во будет расти очень быстро. А я вот честно не понимаю. Неужели лень создать свой класс от нативного, и добавить туда нужные методы, и не дергать нативные события. "Избавились от лишнего класса" - как то... не те слова.) ------------------ |
© 2000-2024 Fox Club  |