Как создать вложенный макрос в Boo

Я создаю вложенные макросы в Boo, я написал эту программу:

macro text:
  macro subMacro:
    text["Text"] = "Hello World"

  return [|
    block:  
      System.Console.WriteLine( "Hello World" );
  |]

Но я получаю сообщение об ошибке «Неизвестный идентификатор: 'text'» в 3-й строке кода.


boo
person Neo    schedule 29.01.2010    source источник


Ответы (1)


Ошибка, которую вы получаете, скорее всего, связана с отсутствующим импортом в коде, из которого вызывается макрос.

Например, если ваш макрос находится в пространстве имен с именем foo, вам нужно будет добавить

import foo

В верхней части кода вызова.

Вторая проблема, с которой вы можете столкнуться после исправления этой проблемы с компилятором, — это ошибка

"Неизвестный идентификатор "блок" (BCE0005)

Чтобы исправить это, добавьте .Body после раздела квазицитирования, например:

import Boo.Lang.Compiler.Ast

macro text:
    macro subMacro:
        text["Text"] = "Hello world"

    return [|
        block:
            System.Console.WriteLine("Hello World");
    |].Body

РЕДАКТИРОВАТЬ - макросы ИМХО - это что-то вроде темного искусства. Для получения дополнительной помощи посетите список рассылки Boo или отличные DSL в BOO

person matt    schedule 02.02.2010