![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
eval() в Delphi
wii © (2008-01-20 17:28:00)Существует ли в Delphi аналог функции eval() из javascript, которая переводит строку в выражение?
Юрий Зотов (2008-01-21 18:36:00) [1]> homm © (21.01.08 17:50) [41]
> homm © (21.01.08 17:59) [42]
Ваши аргументы поистине неоспоримы. Поэтому я и не буду их оспаривать.
Palladin (2008-01-21 18:34:00) [2]В RemObject Pascal Script и его подобных все функции организующие eval есть :) но особенно рекомендую RO PS, очень красиво построен, есть огорчающие моменты, но он жестоко разыивается и фиксится... ну еще один молекулярноминимальный плюсик... он бесплатный
homm (2008-01-21 17:59:00) [3]> [40] Юрий Зотов © (21.01.08 17:41)
Если, да кабы… Частный случай.
homm (2008-01-21 17:50:00) [4]> [40] Юрий Зотов © (21.01.08 17:41)
> Если строку Expression мы формируем сами, то нам всегда
> известно, какие переменные в ней встречаются.
Уже ли? Всегда ли?
Юрий Зотов (2008-01-21 17:41:00) [5]> homm © (21.01.08 16:57) [38]
> когда нам заранее известно, какие переменные понадобятся
> интерпретируемому коду.
Если строку Expression мы формируем сами, то нам всегда известно, какие переменные в ней встречаются.
Сергей М. (2008-01-21 16:57:00) [6]
> wii (21.01.08 16:52) [36]
> Мне кажется ваш спор бессмысленный
Ну ты и клоун)
homm (2008-01-21 16:57:00) [7]> [35] Юрий Зотов © (21.01.08 16:50)
> Но он возможен, принципиальных препятствий тоже нет.
Очень не дальновидно с вашей стороны так утверждать, т.к. они естественно есть, и не быть их не может.
[31] — не аналог, [31] — частный случай, когда нам заранее известно, какие переменные понадобятся интерпретируемому коду. Или вы знаете способ инумеровать все переменные, доступные на этапе выполнения в данном блоке, с целью их передачи в тело eval'а?
Юрий Зотов (2008-01-21 16:55:00) [8]> wii (21.01.08 16:52) [36]
Уточните вопрос - какие операции и переменные каких типов могут встречаться в выражениях? Могут ли в них встречаться функции и если да, то какие?
wii (2008-01-21 16:52:00) [9]Мне кажется ваш спор бессмысленный. Лучше помогите мне с вопросом :)
Юрий Зотов (2008-01-21 16:50:00) [10]> homm © (21.01.08 16:47) [34]
В вопросе спрашивается, есть ли аналог, а не точная копия.
Готового аналога, естественно, нет. Но он возможен, принципиальных препятствий тоже нет.
homm (2008-01-21 16:47:00) [11]> [33] Юрий Зотов © (21.01.08 16:44)
Нет. Протатип функции eval выглядит так:
function Eval(Expression: string): variant;
И доступны коду любые переменные, дочтупные в вызывающем блоке, а не только те, о которых позаботился программист, вызывающий функцию.
Юрий Зотов (2008-01-21 16:44:00) [12]> homm © (21.01.08 16:43) [32]
А разве [31] - не решение?
homm (2008-01-21 16:43:00) [13]> [31] Юрий Зотов © (21.01.08 16:37)
Юрий, это глупый спор. Я прекрасно понимаю, что заадча, в том виде, в котром она нужна автору, скорее всего решаема. Вы прекрасно понимаете, что задача, в том виде, в котром она была сформулированна автором, в Delphi не решаема в принципе. Предлагаю на этом и разойтись.
Юрий Зотов (2008-01-21 16:37:00) [14]> homm © (21.01.08 16:02) [26]
> Кто этим будет заниматся?
Нативный код. Функция может использовать готовую таблицу.
> Сразу все возможные переменные, используемые в программе?
Почему нет? Динамический массив, например.
> А как интерпретируемиый код поймет, что где лежит?
Можно передавать параметры в виде "имя-адрес-тип".
type
TParam = record
Name: string;
Address: pointer;
AType: TVarType;
end;
TParams: array of TParam;
function Eval(Expression: string; Params: TParams): variant;
homm (2008-01-21 16:33:00) [15]> [27] @!!ex © (21.01.08 16:27)
> Ты придираешься к мелочам.
Да нет. Полный аналог функции eval в Delphi невозможен. Частные случаи, когда мы на этапе компиляции еще знаем, какие нам там понядобятся данные вообще не в счет.
wii (2008-01-21 16:30:00) [16]sc это TscriptControl
wii (2008-01-21 16:29:00) [17]Вообще я в свое время делал строковый калькулятор. Просто данная функция более гибкая и могла бы сократить код.
Вопрос по MS ScriptControl:
procedure TForm1.Button1Click(Sender: TObject);
var
x:integer;
begin
sc.Language:='VBScript';
sc.AllowUI:=true;
sc.AddCode(memo1.Text);
x:=sc.Run('AddTwo',4,6);
end;
Почему компилятор ругается на параметры функции Run?
@!!ex (2008-01-21 16:27:00) [18]> [26] homm © (21.01.08 16:02)
Ты придираешься к мелочам. ИМХО
homm (2008-01-21 16:02:00) [19]> [25] Юрий Зотов © (21.01.08 15:58)
> Можно построить таблицу переменных (имя - адрес).
Кто этим будет заниматся? Функция eval? А она где эти данные возьмет?
> Можно передавать значения через параметры.
Сразу все возможные переменные, используемые в программе? А как интерпретируемиый код поймет, что где лежит?
Юрий Зотов (2008-01-21 15:58:00) [20]> homm © (21.01.08 15:47) [24]
> Есть проблемы со связью среды выполнения интерпетированного и
> нативного кода.
Можно построить таблицу переменных (имя - адрес). Можно передавать значения через параметры. Это решения? Решения.
> Но почему я не прав
Потому что [2] и [4] слишком грубо, а [11] - слишком категорично. Это конфа для начинающих, которые часто не умеют толком сформулировать вопрос. Поэтому стоило бы уточнить, что конкретно автору нужно. И либо объяснить, в чем он неправ, либо помочь. Но не [2] и [4]. Незнание основ в этойконфе - нормально.