Использовать процедурный тип при объявлении процедуры\функци

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение Лекс Айрин » 19.04.2017 15:58:03

olegy123 писал(а):Вот бы с паскалем так..


Свят, свят, свят... и так уже слишком много паскалей для одного компилятора. ($MODE FPC, $MODE TP, $MODE OBJFPC,$MODE DELPHI...)
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 19.04.2017 15:59:10

>>и так уже слишком много паскалей для одного компилятора
Дак это от отсутствия стандартов))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение olegy123 » 19.04.2017 16:02:32

А если вы используете чужой парсер тогда понятно почему +100500 определений команд нужно..
Не проще самому написать парсер? тогда команды можно разбирать на что, куда, кому и как.. вместо их вариаций
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 19.04.2017 16:23:52

Парсер чего. я непонимаю? вот пример моей команды:
Код: Выделить всё
function DrawLine_com(operands:TCommandOperands):TCommandResult;
var
    pline:PGDBObjLine;
    p1,p2:gdbvertex;
begin
    if commandmanager.get3dpoint('Specify first point:',p1) then//просим первую точку
    if commandmanager.get3dpoint('Specify second point:',p2) then//просим вторую точку
    begin
      pline := AllocEnt(GDBLineID);//выделяем память
      pline^.init(nil,nil,0,p1,p2);//инициализируем

      zcSetEntPropFromCurrentDrawingProp(pline);//присваиваем текущие слой, вес и т.п
      zcAddEntToCurrentDrawingWithUndo(pline);//добавляем в чертеж
    end;
    result:=cmd_ok;
end;

ее регистрация в программе
Код: Выделить всё
CreateCommandFastObjectPlugin(@DrawLine_com,'DrawLine',CADWG,0);

после ввода в командную строчку 'DrawLine' или активации экшена с этой командой - будет запущена соответствующая процедура. Это простейший случай
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение olegy123 » 19.04.2017 16:56:59

zub писал(а):Зачем при объявлении 100500 функций надо писать полную декларацию? Потом приспичивает добавить например arg2 и приходится 100500 раз копипастить.
какнибудь так было бы гораздо логичней:

Проблема не в паскале.. проблема в решении задачи..
Логичнее определить команду и потом уже определить аргумент(массив аргументов). Тогда не нужно копипастить функционал под каждый аргумент..
[Команда] [аргумент],[аргумент]..

Добавлено спустя 9 минут 9 секунд:
Re: Использовать процедурный тип при объявлении процедуры\функци
что мешает в функцию отправлять массив аргументов, и там определять количество их
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 19.04.2017 17:30:28

Чето вас нетуда понесло. Похоже вы путаете мои "команды" и скрипты.
>>Проблема не в паскале.. проблема в решении задачи..
Что я куда не передавал, проблема не в этом. Проблема в том что нельзя (без костылей) централизовано определить множество одинаковых функций
zub писал(а):всё получается. но много копипасты + в режиме delphi нет контроля аргументов = можно прокопипастится
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение Лекс Айрин » 19.04.2017 18:04:07

Лекс Айрин писал(а):Дак это от отсутствия стандартов))


в С и иже с ними стандарты есть... а толку?
Паскалей же сейчас (актуальных) две с полтиной программы, не считая версий.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение olegy123 » 19.04.2017 18:38:44

zub писал(а):Похоже вы путаете мои "команды" и скрипты.

команды же скриптовые..

я как понял при
zub писал(а):function command1(arg1:TMyArg):TMyCommandResult;

function command1(arg1:TMyArg;arg2:TMyArg):TMyCommandResult;
нужно переопределять эту же функцию command1 заново..

zub писал(а): Проблема в том что нельзя (без костылей) централизовано определить множество одинаковых функций

ну для этого существуют макросы.

Добавлено спустя 7 минут 1 секунду:
Re: Использовать процедурный тип при объявлении процедуры\функци
Я про то что можно переделать так:
zub писал(а):var
com:TMyCommand;
..
com:=GetNeededCommand;
res:=com(arg1:TMyArg)


в
Код: Выделить всё
type TMyArgArray = array of TMyArg;
TMyCommand=function(arg1:TMyArgArray):TMyCommandResult
..
com:=GetNeededCommand;
res:=com(arg1:TMyArgArray);
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 19.04.2017 18:54:34

>>команды же скриптовые..
их можно комбинировать, есть некоторые средства взаимодействия, но до полноценных скриптов далеко. Скрипты будут отдельно.

>>ну для этого существуют макросы.
уж незнаю почему, но макросы и инклуды - отношу к костылям

>>Я про то что можно переделать так:
это усложняет содержимое команд. и добавляет кучу проблем с синтаксисом в рантайме
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение olegy123 » 19.04.2017 19:03:52

zub писал(а):это усложняет содержимое команд. и добавляет кучу проблем с синтаксисом в рантайме

если вы хотите гибкость в скриптах, то должны учитывать их в анализе команд. Иначе вы и +100500 команд в реале напишете.. при необходимых <50

Я сам пишу прослойку в Lua. Там в функцию аргументы в виде стека передаются, тот же самый массив.

Добавлено спустя 8 минут 38 секунд:
Re: Использовать процедурный тип при объявлении процедурыфункци
У самого руки чешутся написать jit компилятор, который бы выдавал jit asm код.

Добавлено спустя 2 минуты 49 секунд:
Re: Использовать процедурный тип при объявлении процедуры\функци
zub писал(а):уж незнаю почему, но макросы и инклуды - отношу к костылям

Мне приходится использовать один и тот же код для ARM и x86_64
там никак без макросов..
это сишники используют макросы не к месту, и потом смотришь пол дня что за size_t, какой тип имеют виду uint32_t или uint64_t.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 19.04.2017 19:59:00

>>Я сам пишу прослойку в Lua. Там в функцию аргументы в виде стека передаются, тот же самый массив.
У меня тоже для связи есть стек. например если перед вышеприведенной командой запустить команду которая после себя оставит в стеке координаты точки, то первый get3dpoint незаметно для ползователя извлекет их оттуда, и пользователю останется указать только вторую координату.
Но это ничего не меняет
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение olegy123 » 20.04.2017 11:12:46

На сколько понял zcad скриптовый.. и вы щас пытаетесь перенести все в командую строку? Это так?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение serbod » 20.04.2017 12:30:39

Код: Выделить всё
case ACommand of
  cmd1: Result := 1+1;
  cmd2: Result := 2*2;
  cmdN: Result := 100500 div 100500;
end;
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение zub » 20.04.2017 13:06:01

>>и вы щас пытаетесь перенести все в командую строку? Это так?
Нет. всё изначально было так сделано. Это не проблема что что то не получается реализовать. просто хочется фичи.

serbod
Не))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Использовать процедурный тип при объявлении процедуры\фу

Сообщение ElectroGuard » 20.04.2017 19:24:00

скриптовые интерпретаторы нужно какие-то искать. возможно есть что-то готовое
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru