Опять про вывод типов и overload resolution
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.09.09 11:38
Оценка:
1)
module Program
{
  Main() : void
  {
    Bar(fun(x) { x.Foo() });
  }
  
  Bar[T](_ : A -> T) : void { }
  Bar(_ : A -> long) : void { }
}

class A
{
    public Foo() : int { 1 }
}

expected System.Int64+, got int in call result: System.Int32 is not a subtype of System.Int64 [simple require]

В чем смысл этой ошибки? Почему нельзя неявно привести int к long?
Даже если второй из методов Bar не подходит, почему не выбирается первый? Ведь если второй метод убрать, то первый будет испешно вызыван.

2)
module Program
{
  Main() : void
  {
    Bar(_.Foo());
  }
  
  Bar(_ : A -> void) : void { }
  Bar(_ : B -> void) : void { }
}

class A
{
    public Foo() : void { }
}

class B { }

typing fails on accessing member 'Foo' in '_N_1800' : ?


Почему не удаётся вывести типы? В C# аналогичный пример будет успешно компилироваться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.