Игнорирование результата функции и overload resolution
От: nikov США http://www.linkedin.com/in/nikov
Дата: 26.05.11 20:01
Оценка:
Вот такой код компилируется успешно:

using System.Linq;

module Program
{
  Main() : void
  {
      def x = [].ToList;
      _ = x()
  }
}


а такой — нет:


using System.Linq;

module Program
{
  Main() : void
  {
      def x = [].ToList; // Error: none of the overloads of ToList is possible
      x()
  }
}


Почему? Какой раздел документации языка это описывает?
Re: Игнорирование результата функции и overload resolution
От: Ka3a4oK  
Дата: 26.05.11 20:32
Оценка:
Здравствуйте, nikov, Вы писали:

N>Вот такой код компилируется успешно:


N>
N>using System.Linq;

N>module Program
N>{
N>  Main() : void
N>  {
N>      def x = [].ToList;
N>      _ = x()
N>  }
N>}
N>


N>а такой — нет:



N>
N>using System.Linq;

N>module Program
N>{
N>  Main() : void
N>  {
N>      def x = [].ToList; // Error: none of the overloads of ToList is possible
N>      x()
N>  }
N>}
N>


N>Почему? Какой раздел документации языка это описывает?


Функция Main() — тип возвращаемого значения — void
Выражение _=x() — тип значения — void
Выражение x() — тип значения — тип возвращаемого значения функции x().

Ошибка — несоответствие типа возвращаемого значения для функции Main.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[2]: Игнорирование результата функции и overload resolutio
От: nikov США http://www.linkedin.com/in/nikov
Дата: 26.05.11 20:39
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Ошибка — несоответствие типа возвращаемого значения для функции Main.


Почему-то сообщение об ошибке говорит совсем о другом.
И почему тогда компилируется такой код?

using System.Linq;

module Program
{
  Main() : void
  {
      [].ToList();
  }
}
Re: Игнорирование результата функции и overload resolution
От: nikov США http://www.linkedin.com/in/nikov
Дата: 26.05.11 21:16
Оценка:
Ещё вопрос: почему не компилируется такой код?

using System.Linq;

module Program
{
  Main() : void
  {
      def x = [].Select; // Error: none of the overloads of Select is possible
      _ = x(y => y)
  }
}
Re: Игнорирование результата функции и overload resolution
От: catbert  
Дата: 27.05.11 07:18
Оценка:
Здравствуйте, nikov, Вы писали:

N>Почему? Какой раздел документации языка это описывает?


Мне кажется, это баг. Причем довольно неприятный. Он (а может и не он, а другой баг ) не позволяет, например, писать так:

    results.Iter(MessageBox.Show) // похожая ошибка

Не уверен, что его легко исправить.
Re[2]: Игнорирование результата функции и overload resolutio
От: hardcase Пират http://nemerle.org
Дата: 27.05.11 07:33
Оценка:
Здравствуйте, nikov, Вы писали:

N>Ещё вопрос: почему не компилируется такой код?


Это косяк в выборе перегрузок

Такой вот код вполне работает:
using System.Console;

module FooExtensions
{
  public Foo[T, U](this x : list[T], f : T -> U) : list[U]
  {
    Nemerle.Collections.NList.Map(x, f)
  }
}

module Program
{
  Main() : void
  {
      def x = [1, 2].Foo;
      def y = x(a => a + 1);
      WriteLine(y);
      _ = ReadKey(true);
  }
}
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.