Почему нельзя пользоваться usesite в данном примере ?
А если поставить dyn, то все работает.
using Nemerle;
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using Nemerle.Compiler.Typedtree;
using Nemerle.Macros;
using System;
namespace MacroLibrary1
{
[MacroUsage(MacroPhase.BeforeInheritance, MacroTargets.Assembly)]
macro Macro2()
{
Macro2Impl.DoTransform(Macros.ImplicitCTX())
}
module Macro2Impl
{
public DoTransform(typer : Typer) : void
{
Macros.DefineCTX(typer);
def a = <[ A[$("T" : usesite)] ]>; // dyn работает
def x = typer.Env.Define(<[
decl: public class A[T] { a : $a; } ]>); // error : unbound type name `T'
x.Compile();
}
}
}
Здравствуйте, _NN_, Вы писали:
Отвечу сам себе.
Нужно использовать цитату "name".
Более того можно использовать ее и в определении обобщенных аргументов.
def t = Name("T");
def a = <[ A[$(t : name)] ]>;
def x = typer.Env.Define(<[ decl: public class A[$(t : name)] { a : $a; } ]>);
x.Compile();