Здравствуйте, nikov, Вы писали:
N>Здравствуйте, konstardiy, Вы писали:
K>>Возможность укзать явно, для каких аргументов генерика какой тип принять — мне нравится.
N>А может быть, сразу, и значения по умолчанию приделать...
Ага, типа после констреинтов на тип писать
Здравствуйте, Мишень-сан, Вы писали:
H>>Dictionary_[Type1, type2]
МС>Не выйдет, к сожалению МС>_ вполне легальный символ в любом литерале, причём на любой позиции. ИМХО, такой вариант создаст ещё больше неоднозначностей, чем <> или [].
Честно говоря, я не вижу принципиальных ограничений. Wildcard _ по прямому назначению используется в несколько ином контексте: сопоставление с образцом, частичное применение, по непрямому — префикс игнорируемого значения; а вот случай конкретизации генерика вполне обособлен (слева всегда идет имя типа) и однозначен. Мне просто кажется, что такой вариант читать проще — нету крякозябров всяких: @, #, !. Ближайшей альтернативой можно считать пару ^[ ]
Здравствуйте, VladD2, Вы писали:
S>>Я не за идентичности синтаксиса любой ценой, но за максимально возможное соответствие. Мой пост можно расценивать как вклад в копилку аргументов за сохранение угловых скобок, пусть и с двоеточием в виде префикса. А окончательное решение конечно нужно принимать по совокупности всех аргуменов.
VD>И получается, что интересы новичков начинают конфликтовать с интересами тех, кто использует язык по полной.
Конкретно здесь конфликта не вижу — синтаксис определения типов все равно будет меняться, и тем кто уже юзает язык все равно придется привыкать по новой и переписывать свой код. Кстати, ты похоже уже принял решение по скобочкам? — вон и голосование прикрыл. Странно только, что в гугловой группе этот вопрос не обсуждался.
[MyAttribute(typeof(IList!<string>))]
public class A!<T> where T : IMyInterface!<string>
{
public B : IEnumerable!<T>{ get; set; }
}
def x = List!<int, List!<int, List!<int>>>([1, 2])[0];
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
А>>А почему вообще не писать так
А>>func a(a,b,c):d А>>....
А>>вызов ф(int,1,4):double
А>>???
А>>какой смысл вообще выделять генерики то? А>>Почему их не сделать обычным типом?
__>Это что означает ? Давайте подробнее.
__>скобки () создадут другой конфлик __>
__>class A {}
__>class B {}
__>module P
__>{
__> F[T](t : T) : int -> void { }
__> F(t : int) : void { }
__> Main() : void
__> {
__> def A = 1;
__> def B = 2;
__> F(A)(B);
__> }
__>}
__>
class A {}
class B {}
module P
{
F(T ,t : T) : int -> void { }
F(t : int) : void { }
Main() : void
{
def A = 1;
def B = 2;
F(A, B); // это вызов генерика
F(A); // это вызов функции
}
}
class A {}
class B {}
module P
{
F(X, Y ,x : Y, y : Y) : void { }
F(x : int, y : int, z : int, w : int) : void { }
Main() : void
{
def A = 1;
def B = 2;
F(A, B, A, B); // вызовет генерика или нет ?
}
}
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
__>Т.е. типы и аргументы в перемешку ?
class A {}
class B {}
module P
{
F(X, Y ,x : Y, y : Y) : void { }
F(x : int, y : int, z : int, w : int) : void { }
Main() : void
{
def A = 1;
def B = 2;
F(A, B, A, B); // вызовет генерика или нет ? - функции
так как передаются значения
F(type(A), type(B), A, B) // для генерика
}
}
А вообще в таких неоднозначностяъ надо просто ругаться
Re[5]: Предлагаю подобрать скобки для типов...
От:
Аноним
Дата:
08.09.11 12:54
Оценка:
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
__>Т.е. типы и аргументы в перемешку ?
class A {}
class B {}
module P
{
F(X, Y ,x : Y, y : Y) : void { }
F(x : int, y : int, z : int, w : int) : void { }
Main() : void
{
def A = 1;
def B = 2;
F(:A, :B, A, B); // генерика
F(A, B, A, B); // Функция
}
}
Здравствуйте, Аноним, Вы писали:
А>Почему их не сделать обычным типом?
Очевидно, потому что они являются обобщенным типом.
ЗЫ
Сори, какой вопрос, таков ответ.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Предлагаю подобрать скобки для типов...
От:
Аноним
Дата:
08.09.11 14:20
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Аноним, Вы писали:
А>>Почему их не сделать обычным типом?
VD>Очевидно, потому что они являются обобщенным типом.
VD>ЗЫ
VD>Сори, какой вопрос, таков ответ.
Дело в том, что, как раз, в большинстве случаев тип в генерик методе явно указывать не нужно.
А когда нужно, хотелось бы легко различать где типы и где аргументы, ну и, кроме того, не будет неоднозначностей.
Здравствуйте, Аноним, Вы писали:
>>Сори, какой вопрос, таков ответ.
А>Зачем делать искусственное разделение?
Не вижу никакой искусственности. Нмерл не выводит обобщенных типов и требует их явного задания.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Предлагаю подобрать скобки для типов...
От:
Аноним
Дата:
08.09.11 15:12
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Аноним, Вы писали:
>>>Сори, какой вопрос, таков ответ.
А>>Зачем делать искусственное разделение?
VD>Не вижу никакой искусственности. Нмерл не выводит обобщенных типов и требует их явного задания.
Есть принципиальная причина "Немерл не выводит обобщенных типов и требует их явного задания"?
Зачем усложнять когда можно обобщить?
например что такое статистический объект? это тип или это значение?
Здравствуйте, Аноним, Вы писали:
А>Есть принципиальная причина "Немерл не выводит обобщенных типов и требует их явного задания"? А>Зачем усложнять когда можно обобщить?
Вот обобщение в данном случае и есть усложнение. В этом мире ничего даром не дается. Вывод обобщенного типа дает больше поводов для ошибок, замедлит алгоритм и потребует много работы на его реализацию. Меж тем, практика показывает, что обобщенные локальные функции в Nemerle используются очень редко, и всегда могут быть заменены методами.
При использовании же вывод типов работает совершенно одинаково как для обобщенных функций функций, так и для обычных.
А>например что такое статистический объект?
Не знаю. Это у тебя надо спросить.
А>это тип или это значение?
О чем речь то?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Любая пара этих скобок для аргументов типов вносит в синтаксис неоднозначность.
Имеем варианты:
1) допустить неоднозначности и бороться с ними по возможности цивилизованными способами;
2) вводить другие символы, которые у кого-нибудь да вызовут аллергию.
На первый взгляд, в текущей постановке задача не имеет хорошего решения.
Лично мне больше всего импонируют варианты Type<Arg> и Type`Arg`, потому что символ ` набирается нажатием одной кнопки без шифта и не выглядит слишком дико.