Как правильно создавать обобщенный тип ?
От: _NN_ www.nemerleweb.com
Дата: 17.08.13 15:08
Оценка:
// Дано имя в виде строки
def name = "T";

// Создаем классы
def ppn = [PT.Splicable.Name(PT.Name(name))];
def pn =[ <[ $(name : usesite) ]>];
      
def x = <[ decl: public interface X[..$ppn] {} ]>;
def y = <[ decl: public interface Y[..$ppn] : X[..$pn] {} ]>;


Так не работает: error : unbound type name `T'

А как правильно ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Как правильно создавать обобщенный тип ?
От: _NN_ www.nemerleweb.com
Дата: 17.08.13 15:42
Оценка:
// Дано имя в виде строки
def name = "T";

// Создаем классы
def ppn = [PT.Splicable.Name(PT.Name(name))];
def pn = [PExpr.Ref(PT.Name(name))];
      
def x = <[ decl: public interface X[..$ppn] {} ]>;
def y = <[ decl: public interface Y[..$ppn] : X[..$pn] {} ]>;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Как правильно создавать обобщенный тип ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.13 23:37
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Так не работает: error : unbound type name `T'

_NN>А как правильно ?

Скорее всего дело в цвете имени создаваемом через конструктор Name. Задавай цвет явно (1 или -1), например. Или используй один и тот же способ для создания имени (чтобы цвет был одинаковым). Например, так:
    // Дано имя в виде строки
    def name = "T";

    // Создаем классы
    def ppn = [Splicable.Name(<[ $(name : usesite) ]>.name)];
    def pn =[ <[ $(name : usesite) ]>];
      
    def x = <[ decl: public interface X[..$ppn] {} ]>;
    def y = <[ decl: public interface Y[..$ppn] : X[..$pn] {} ]>;
    typer.Manager.CoreEnv.Define(x).Compile();
    typer.Manager.CoreEnv.Define(y).Compile();
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.