как получить все типы и параметры функции?
От: Аноним  
Дата: 13.01.12 05:35
Оценка:
хочу сделать следующую вещь. на вход макроса подается функция, при этом создается форма для ввода параметров, открывается и по нажатию ок передаются параметры в функцию...
Re: как получить все типы и параметры функции?
От: Аноним  
Дата: 13.01.12 11:17
Оценка:
могу получить в виде TExpr, но тогда не понятно как матчить....
а хочется как правильно
Re: как получить все типы и параметры функции?
От: catbert  
Дата: 13.01.12 11:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>хочу сделать следующую вещь. на вход макроса подается функция, при этом создается форма для ввода параметров, открывается и по нажатию ок передаются параметры в функцию...


Хорошая идея

Я надумал три варианта:
1) провести типизацию выражения, которое обозначает функцию, и анализировать TExpr
2) по имени функции найти ее декларацию, и там проанализировать ClassMember.Function
3) пометить нужную функцию макроатрибутом, сгенерировать форму, и просто показывать эту форму

Вариант 3) имхо более удобный для пользователя (он не должен будет пользоваться макросами, поэтому языком пользователя может быть даже не Немерле). Но варианты 2) и 3) требуют декларации, то есть их нельзя использовать для функции из референсов.

Вариант 1) самый "правильный", и работает для любой функции. Но он и посложнее.
Re[2]: как получить все типы и параметры функции?
От: Аноним  
Дата: 13.01.12 12:10
Оценка:
пока такой вопрос, можно ли разобрать TExpr таким образом?
| <[$func (..$funcparam) ]>
Re[3]: как получить все типы и параметры функции?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.01.12 13:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>пока такой вопрос, можно ли разобрать TExpr таким образом?

А>| <[$func (..$funcparam) ]>

Нет. Квази-цитирование работает только для нетипизированного АСТ.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: как получить все типы и параметры функции?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.01.12 13:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>могу получить в виде TExpr, но тогда не понятно как матчить....

А>а хочется как правильно

Что понимается под параметрами функций? Типизированные параметры представляются типом TParameter. А TExpr может быть только ссылкой на параметр.

Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: как получить все типы и параметры функции?
От: Аноним  
Дата: 13.01.12 14:17
Оценка:
VD>Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?

Хочется сделать следующий макрос.

На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее
пример
form fun(x:int,y:string){WriteLine($"$x$y")};
Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...

Например если я добавлю в функцию третий параметр то мне не придется ничего менять в форме....
Re[4]: как получить все типы и параметры функции?
От: Jack128  
Дата: 13.01.12 15:49
Оценка: +1
Здравствуйте, Аноним, Вы писали:

VD>>Собственно то какое представление лучше обрабатывать зависит от основной задачи. Зачем нужна информация о параметрах?


А>Хочется сделать следующий макрос.


А>На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее

А>пример
А>form fun(x:int,y:string){WriteLine($"$x$y")};
А>Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...

А>Например если я добавлю в функцию третий параметр то мне не придется ничего менять в форме....


а почему бы не через reflection эту задачу не решить???
Re[4]: как получить все типы и параметры функции?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.01.12 16:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хочется сделать следующий макрос.

А>На вход ему передается функция и макрос формирует форму которая вводит параметры функции и выполняет ее
А>пример
А>form fun(x:int,y:string){WriteLine($"$x$y")};
А>Формирует форму с параметрами x,y соответствующих типов и передает их в функцию...

Это можно (без особых проблем) сделать и без макросов — в рантайме.

В прочем можно и макросом. Только я бы посоветовал бы использовать методы, а не лямбды. Так будет проще (для начала).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.