хочу сделать следующую вещь. на вход макроса подается функция, при этом создается форма для ввода параметров, открывается и по нажатию ок передаются параметры в функцию...
Re: как получить все типы и параметры функции?
От:
Аноним
Дата:
13.01.12 11:17
Оценка:
могу получить в виде TExpr, но тогда не понятно как матчить....
а хочется как правильно
Здравствуйте, Аноним, Вы писали:
А>хочу сделать следующую вещь. на вход макроса подается функция, при этом создается форма для ввода параметров, открывается и по нажатию ок передаются параметры в функцию...
Хорошая идея
Я надумал три варианта:
1) провести типизацию выражения, которое обозначает функцию, и анализировать TExpr
2) по имени функции найти ее декларацию, и там проанализировать ClassMember.Function
3) пометить нужную функцию макроатрибутом, сгенерировать форму, и просто показывать эту форму
Вариант 3) имхо более удобный для пользователя (он не должен будет пользоваться макросами, поэтому языком пользователя может быть даже не Немерле). Но варианты 2) и 3) требуют декларации, то есть их нельзя использовать для функции из референсов.
Вариант 1) самый "правильный", и работает для любой функции. Но он и посложнее.
Re[2]: как получить все типы и параметры функции?
От:
Аноним
Дата:
13.01.12 12:10
Оценка:
пока такой вопрос, можно ли разобрать TExpr таким образом?
| <[$func (..$funcparam) ]>
Здравствуйте, Аноним, Вы писали:
А>могу получить в виде TExpr, но тогда не понятно как матчить.... А>а хочется как правильно
Что понимается под параметрами функций? Типизированные параметры представляются типом TParameter. А TExpr может быть только ссылкой на параметр.
Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: как получить все типы и параметры функции?
От:
Аноним
Дата:
13.01.12 14:17
Оценка:
VD>Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?
Хочется сделать следующий макрос.
На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее
пример
form fun(x:int,y:string){WriteLine($"$x$y")};
Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...
Например если я добавлю в функцию третий параметр то мне не придется ничего менять в форме....
Здравствуйте, Аноним, Вы писали:
VD>>Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?
А>Хочется сделать следующий макрос.
А>На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее А>пример А>form fun(x:int,y:string){WriteLine($"$x$y")}; А>Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...
А>Например если я добавлю в функцию третий параметр то мне не придется ничего менять в форме....
а почему бы не через reflection эту задачу не решить???
Здравствуйте, Аноним, Вы писали:
А>Хочется сделать следующий макрос. А>На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее А>пример А>form fun(x:int,y:string){WriteLine($"$x$y")}; А>Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...
Это можно (без особых проблем) сделать и без макросов — в рантайме.
В прочем можно и макросом. Только я бы посоветовал бы использовать методы, а не лямбды. Так будет проще (для начала).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.