Вот такой код компилируется успешно:
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()
}
}
Почему? Какой раздел документации языка это описывает?
Здравствуйте, 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>>
Здравствуйте, Ka3a4oK, Вы писали:
KK>Ошибка — несоответствие типа возвращаемого значения для функции Main.
Почему-то сообщение об ошибке говорит совсем о другом.
И почему тогда компилируется такой код?
using System.Linq;
module Program
{
Main() : void
{
[].ToList();
}
}
Ещё вопрос: почему не компилируется такой код?
using System.Linq;
module Program
{
Main() : void
{
def x = [].Select; // Error: none of the overloads of Select is possible
_ = x(y => y)
}
}
Здравствуйте, nikov, Вы писали:
N>Почему? Какой раздел документации языка это описывает?
Мне кажется, это баг. Причем довольно неприятный. Он (а может и не он, а другой баг
) не позволяет, например, писать так:
results.Iter(MessageBox.Show) // похожая ошибка
Не уверен, что его легко исправить.
Здравствуйте, 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);
}
}