Добрый день!
пишу первый свой макрос:
macro f1 (x)
{
<[
$x + 1;
]>
}
Main() : void {
def a = f1(2);
}
Ожидаю, что это будет эквивалентно
def a = 3;
Но компилятор (плагин для visual studio 2013) выдает ошибку:
Error 1 unbound name `f1'
Подскажите, пожалуйста, в чем ошибка?
И сразу второй вопрос. макро-wizard в студии создает такое описание:
macro f1(x : double)
{
Macro1Impl.DoTransform(Macros.ImplicitCTX(), x)
}
module Macro1Impl
{
public DoTransform(typer : Typer, x : double) : PExpr
{
Macros.DefineCTX(typer);
// TODO: Add implementation here.
<[ $x + 1 ]>
}
}
Что значит "DoTransform(Macros.ImplicitCTX()"? В
https://github.com/rsdn/nemerle/wiki/Macros-tutorial такого нет
Здравствуйте, Аноним, Вы писали:
А>Но компилятор (плагин для visual studio 2013) выдает ошибку:
А>А>Error 1 unbound name `f1'
А>
Макрос нужно компилировать отдельно и сборку с ним подключать как Macro Reference.
А>Что значит "DoTransform(Macros.ImplicitCTX()"? В https://github.com/rsdn/nemerle/wiki/Macros-tutorial такого нет
Вызов метода ниже, в методе будет работать автокомплит.
Магическое слово ImplicitCTX возвращает экземпляр типизатора.
Здравствуйте, hardcase, Вы писали:
H>Макрос нужно компилировать отдельно и сборку с ним подключать как Macro Reference.
спасибо за ответ! но почему в таком случае пример из
wikipedia успешно компилируется и работает из той же сборки?
Здравствуйте, Аноним, Вы писали:
А>спасибо за ответ! но почему в таком случае пример из wikipedia успешно компилируется и работает из той же сборки?
Потому что макрос if уже есть в стандартной библиотеке.