объявление макроса
От: Аноним  
Дата: 25.06.14 04:19
Оценка:
Добрый день!

пишу первый свой макрос:
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 такого нет
Re: объявление макроса
От: hardcase Пират http://nemerle.org
Дата: 25.06.14 07:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но компилятор (плагин для visual studio 2013) выдает ошибку:

А>
А>Error    1    unbound name `f1'
А>


Макрос нужно компилировать отдельно и сборку с ним подключать как Macro Reference.

А>Что значит "DoTransform(Macros.ImplicitCTX()"? В https://github.com/rsdn/nemerle/wiki/Macros-tutorial такого нет


Вызов метода ниже, в методе будет работать автокомплит.
Магическое слово ImplicitCTX возвращает экземпляр типизатора.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: объявление макроса
От: Аноним  
Дата: 25.06.14 09:14
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Макрос нужно компилировать отдельно и сборку с ним подключать как Macro Reference.


спасибо за ответ! но почему в таком случае пример из wikipedia успешно компилируется и работает из той же сборки?
Re[3]: объявление макроса
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.06.14 10:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>спасибо за ответ! но почему в таком случае пример из wikipedia успешно компилируется и работает из той же сборки?


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