Вот такой код не компилируется:
module M
{
Main() : void
{
def foo[T](y : T, x = []) // Error: in argument #2 (x), needed a list[int-], got list[T]: int is not a subtype of T [simple require]
{
_ = y :: x;
}
foo(1);
}
}
Это баг или так задумано?
Здравствуйте, hardcase, Вы писали:
H>Это ограничение компилятора. Для локальных генерик-функций нужно полностью указывать сигнатуру.
Попробовал, ничего не изменилось:
module M
{
Main() : void
{
def foo[T](y : T, x : list[T] = []) : void // Error: in argument #2 (x), needed a list[int-], got list[T]: int is not a subtype of T [simple require]
{
}
foo(1);
}
}
H>Помимо этого, опциональные аргументы не могут содержать ничего сложнее литералов.
Вроде бы это ограничение только для top-level методов (т.к. для них значение по умолчанию надо сохранять в метаданные для взаимодействия с другими .NET языками). Например, такой код компилируется успешно:
module M
{
Main() : void
{
def foo[T](y : T, x : list[T] = []) : void // OK
{
foo(y)
}
}
}