Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
ВнизВызов функции по её имени Найти похожие ветки
← →
zumo (2003-10-04 11:32) [0]Как вызвать функцию если её имя записано в строковой переменной ?
← →
Palladin (2003-10-04 13:15) [1]никак
← →
Anatoly Podgoretsky (2003-10-04 13:17) [2]Ну почему никак, надо просто сделать соответствие между именем и функцией, например массивы, списки.
← →
Palladin (2003-10-04 13:30) [3]Свести все к простейшему парсеру и интерпритатору...
Согласен, можно. Вот только по мимо имени в строковой переменной понадобятся и параметры в строковой переменной, а так же регистрация каждой нужной функции или процедуры в массивах соответствия... а надоли оно...
> zumo © (04.10.03 11:32)
подобия eval в pascale нет
← →
Anatoly Podgoretsky (2003-10-04 13:57) [4]А как же, конечно все потребуется. Может и не надо, а справится ли?
← →
Song (2003-10-04 14:01) [5]
Если все процедуры, которые вы собираетесь вызывать, имеют список с одними и теми же параметрами (или все без параметров), то это не трудно.
Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например:
type
TMacroProc = procedure(param: Integer);
//массив, сопоставляющий имена процедур их адресам во время выполнения приложения:
TMacroName = string[32];
TMacroLink = record
name: TMacroName;
proc: TMacroProc;
end;
TMacroList = array [1..MaxMacroIndex] of TMacroLink;
const
Macros: TMacroList = (
(name: "Proc1"; proc: Proc1),
(name: "Proc2"; proc: Proc2),
...
); //интерпретатор функций, типа:
procedure CallMacro(name: String; param: Integer);
var
i: Integer;
begin
for i := 1 to MaxMacroIndex do
if CompareText(name, Macros[i].name) = 0 then
begin
Macros[i].proc(param);
break;
end;
end;
{Макропроцедуры необходимо объявить в секции Interface модуля или с ключевым словом Far, например: }
procedure Proc1(n: Integer); far;
begin
...
end;
procedure Proc2(n: Integer); far;
begin
...
end;
← →
willys (2003-10-04 16:38) [6]если функция - это метод класса, то можно.
← →
Anatoly Podgoretsky (2003-10-04 21:27) [7]willys © (04.10.03 16:38) [6]
Метод класса это не функция, а метод
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c