Вывод типов в локальной функции и match по вариантам (баг?)
Не компилируется следующее:
public variant Variant
{
| Option1
| Option2
}
class Class1
{
public Method(variants: list[Variant]): void
{
def loop(variants)
{
| Option1 :: [] => ()
| _ => ()
}
loop(variants)
}
}
Выдает следующие ошибки:
Error 1 unbound type name Option1 C:\Users\Александр\Documents\Visual Studio 2005\Projects\Test\NemerleWinApp\NemerleWinApp\Class1.n 21 8 NemerleWinApp
Error 2 in argument #1 (variants) of loop, needed a list.Cons[System.Object+], got list[NemerleWinApp.Variant]: Nemerle.Core.list is not a subtype of Nemerle.Core.list.Cons [simple require] C:\Users\Александр\Documents\Visual Studio 2005\Projects\Test\NemerleWinApp\NemerleWinApp\Class1.n 25 5 NemerleWinApp
Исходя из 2 ошибки понятно что по match выводится что в параметре variants не может быть пустого списка, хотя это наверно не правильно, ведь в последний образец подходит и пустой список. Изменяем исходник следующим образом (см. выделенное):
public variant Variant
{
| Option1
| Option2
}
class Class1
{
public Method(variants: list[Variant]): void
{
def loop(variants)
{
| Option1 :: [] => ()
| [] => ()
| _ => ()
}
loop(variants)
}
}
Но и так тоже не компилируется. Ошибка:
Error 1 unbound type name Option1 C:\Users\Александр\Documents\Visual Studio 2005\Projects\Test\NemerleWinApp\NemerleWinApp\Class1.n 21 8 NemerleWinApp
Если же первый кусок изменить следующим образом (см. выделенное):
public variant Variant
{
| Option1
| Option2
}
class Class1
{
public Method(variants: list[Variant]): void
{
def loop(variants: list[Variant])
{
| Option1 :: [] => ()
| _ => ()
}
loop(variants)
}
}
То все нормально компилируется.
Если match не в локальной функции, то тоже компилируется.
Так же компилируется если в первом куске Option1 заменить на Variants.Option1 (см. выделенное):
public variant Variant
{
| Option1
| Option2
}
class Class1
{
public Method(variants: list[Variant]): void
{
def loop(variants)
{
| Variants.Option1 :: [] => ()
| _ => ()
}
loop(variants)
}
}
Это баг или я чего-то не понял?
ЗЫ. Моя версия что Option1 не считается variant option и из за этого в выводе типов что-то не срабатывает.
... << RSDN@Home 1.2.0 alpha rev. 761>>