Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток...
ругается так:
Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток...
А>писал тут макрос, пишет, что проблема, отошли на багтрекер, А>но я так понял, что все переехало на гугл.код, короче бросаю тут,
А>скажите, пожалуйста, возможно это уже исправлено?
А>спасибо большое
короче, оно не хочет возвращать развернутую в кортеж последовательность,
это уже исправлено? или мне что-то нужно предпринять,
сейчас я возвращаю список, но по логике нужен именно кортеж.
Здравствуйте, Дмитрий, Вы писали:
Д>Здравствуйте, _nn_, Вы писали:
Д>короче, оно не хочет возвращать развернутую в кортеж последовательность, Д>это уже исправлено? или мне что-то нужно предпринять,
Не исправлено.
Д>сейчас я возвращаю список, но по логике нужен именно кортеж.
Тут два варианта, либо оставить список, либо исправлять баг.
Если есть желание, можете попробовать его найти и исправить.
Д>спасибо большое!
Д>Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
Д>internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1
Ты создаешь кортеж из одного элемента.
А в немерле их нет.
Я думаю что это скорее бага чем фича.
Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.
Но в твоем случае результат используется в пользовательском коде.
Так что тебе нужно в любом случае смотреть сколько элементов возвращается.
И если возвращается один элемент то возвращать его, а не кортеж.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Дмитрий, Вы писали:
Д>>
Д>>Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
Д>>internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1
WH>Ты создаешь кортеж из одного элемента. WH>А в немерле их нет.
WH>Я думаю что это скорее бага чем фича. WH>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.
WH>Но в твоем случае результат используется в пользовательском коде. WH>Так что тебе нужно в любом случае смотреть сколько элементов возвращается. WH>И если возвращается один элемент то возвращать его, а не кортеж.
В макросе все просто:
match (intCode)
{
| [a] => a
| _ => <[ (..$intCode) ]>
}
А вот в пользовательском коде как это используется?
Если имеем кортеж с одним элементом просто:
def x = Test1("");
def first = x[0];
А без кортежа только через late ?
Иначе получается, что на каждую компиляцию можем получить другой тип и под него нужно писать другой код.
using MacroLibrary1;
using System.Console;
using Nemerle.Late;
module Program
{
F(a : int) : int
{
a
}
F[T](a : T) : int
{
(late a.Field0) :> int;
}
Main() : void
{
def x = Test1("");
def first = F(x);
System.Console.WriteLine($"$first");
}
}
Тут бы пригодился ITuple, так можно просто было бы отличить тупл от значения.
А почему его нет ?
Здравствуйте, Аноним, Вы писали:
А>Доброго времени суток...
А>писал тут макрос, пишет, что проблема, отошли на багтрекер, А>но я так понял, что все переехало на гугл.код, короче бросаю тут,
А>скажите, пожалуйста, возможно это уже исправлено?
А>спасибо большое
Я тут открыл бранч.
Добавил ITuple и тупл с одним элементом.
Проблемы которые нужно решить:
1. Не удалось добиться доступа по индексу:
Как это вообще реализовано в туплах ?
def a = (1,2);
def aa = a[0];
def x = Nemerle.Builtins.Tuple(1);
def xx = x[0]; // Как включить ?
2. Нет специального синтаксиса для тупла с одним элементом.
Как следствие нет возможности сопоставления с образцом.
А какой синтаксис должен собственно быть ?
Можно как в Python:
(a) — Просто переменная
(a,) — Тупл с одним аргументом
3. Нет возможности вызвать метод с одним аргументом имея тупл с одним аргументом.
Здравствуйте, _nn_, Вы писали:
__>А какой синтаксис должен собственно быть ? __>Можно как в Python: __>(a) — Просто переменная __>(a,) — Тупл с одним аргументом
Здравствуйте, WolfHound, Вы писали:
WH>Я думаю что это скорее бага чем фича. WH>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.
Я думаю где-то тут просто протекла абстракция.
1) Кортеж из двух и более элементов — Nemerle.Builtin.Tuple<...>
2) Кортеж из одного элемента — собственно сам элмент
3) Кортеж без элементов — тип void
Видимо где-то косяк с раскрытием кортежа с одного элемента.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Internal Error
От:
Аноним
Дата:
03.05.11 21:07
Оценка:
Здравствуйте, _nn_, Вы писали: __>Разрешите проблемы, и будет вам счастье
как по мне, то тюпл с одним элементом не нужен,
тюплы — они ведь в некотором смысле статичны,
т.е. на этапе компиляции программист прекрасно знает
сколько у него там элементов.
мне очень помогло)
нужно возвращать одну строку из запроса,
я хотел написать макрос, чтобы можно было так:
def (id1, id2) = getOneRow("select id1, id2 from ...");
т.е чтобы возвращался тюпл, а кол-во элементов в нем зависела от запроса,
но поскольку запрос у меня статичный (для работы макроса),
то там где я это использую я точно знаю, что оно вернет.
а в случае одной колонки будет так:
def id1 = getOneRow("select id1 from ...");
а не так:
def (id1) = getOneRow("select id1 from ...");
и это я считаю полностью логичным.
как по мне, добавление тюпла с одним элементом не расширяет общность.
кстати, как тогда бы выглядело объявление типа тюпла с одним элементом?
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, WolfHound, Вы писали:
WH>>Я думаю что это скорее бага чем фича. WH>>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.
H>Я думаю где-то тут просто протекла абстракция.
H>1) Кортеж из двух и более элементов — Nemerle.Builtin.Tuple<...> H>2) Кортеж из одного элемента — собственно сам элмент H>3) Кортеж без элементов — тип void
Следуя этой логиче должна быть возможность матчить туплы по размеру:
match (myTuple)
{
| (a, b, c) => ()
| (a, b) => ()
| (a) => ()
| () => ()
}
Но это не компилируется.
H>Видимо где-то косяк с раскрытием кортежа с одного элемента.