Кажется, наступил на баг...
От: /Forester/ Россия http://www.akteam.ru
Дата: 30.10.12 10:53
Оценка: +1
Ошибка при компиляции такого кода

using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Console;
using System.Linq;

module Program
{
  Main() : void
  {
      def a = A.[B]();
      def listB = List.[B]();
      a.F1(listB);
      a.F2(listB); // Main.n(17,12): error : in argument #1 (_N_wildcard_3510), 
                   // needed a System.Collections.Generic.IEnumerable[T1+], 
                   // got System.Collections.Generic.List[B]: 
                   // B is not a subtype of T1 [simple require]
  }
}

class A[T1]
{
    public F1(_ : IEnumerable[T1]) : void {}
    public F2[T2](_ : IEnumerable[T2]) : void where T2 : T1 {}
}

class B
{
}


Пример навеян Linq2Sql, метод A.F2 аналогичен Table.DeleteAllOnSubmit.
Это баг немерле или я что-то не так понимаю?
Re: Кажется, наступил на баг...
От: Ziaw Россия  
Дата: 30.10.12 11:43
Оценка:
Здравствуйте, /Forester/, Вы писали:

F>Пример навеян Linq2Sql, метод A.F2 аналогичен Table.DeleteAllOnSubmit.

F>Это баг немерле или я что-то не так понимаю?

Можно добавить листинг классов A и B?
Re: Кажется, наступил на баг...
От: _NN_ www.nemerleweb.com
Дата: 30.10.12 12:01
Оценка:
Здравствуйте, /Forester/, Вы писали:

Похоже баг.
Видимо компилятор не умеет обрабатывать where T2 : T1 при T2 == T1

C# собирает:
interface IE<T> {}
class E<T> : IE<T> {}

class Program
{
    static void Main()
    {
        var a = new A<B>();
        var b = new E<B>();
        a.F2(b);
    }
}

class A<T1>
{
    public void F2<T2>(IE<T2> _) where T2 : T1 {}
}

class B
{
}


Nemerle нет:
interface IE[T] {}
class E[T] : IE[T] {}

module Program
{
  Main() : void
  {
      def a = A.[B]();
      def b = E.[B]();
      a.F2(b); // Ошибка
  }
}

class A[T1]
{
    public F2[T2](_ : IE[T2]) : void where T2 : T1 {}
}

class B
{
}


P.S.
Когда приводите пример кода, старайтесь убирать все внешние зависимости.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Кажется, наступил на баг...
От: /Forester/ Россия http://www.akteam.ru
Дата: 30.10.12 12:12
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Можно добавить листинг классов A и B?


Его нет, они пустые. Приведенный код — это полное содержимое файла Main.n проекта консольного приложения. Другого кода в проекте нет.
Re[2]: Кажется, наступил на баг...
От: /Forester/ Россия http://www.akteam.ru
Дата: 30.10.12 12:15
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>P.S.

_NN>Когда приводите пример кода, старайтесь убирать все внешние зависимости.

В смысле List<T> и IEnumerable<T> в примере? Хорошо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.