Точка в генерик типе
От: _nn_ www.nemerleweb.com
Дата: 21.09.11 11:44
Оценка:
using System.Collections.Generic;

class A
{
  private a : /*1*/ List.[string] = /*2*/ List.[string]();

  F() : void
  {
    def x = /*3*/ List.[string]();
  }
}


Компилятор разрешает в первом указании типа не писать ".", однако во втором и в третьем случае обязывает.

Можно ли улучшить эту ситуацию?
Например, введя дополнительные эвристики:

В выражении A[B](...), ежели A и B типы, и A обобщенный тип, то это выражение трактуется как A.[B](...).


Иначе, если забыть поставить точку получим фейерверк:

a.n:2:39:2:51: ←[01;31merror←[0m: cannot find any suitable indexer in 'List' (type is ? -> ?)
a.n:2:39:2:51: ←[01;31merror←[0m: cannot find any suitable indexer in 'List' (type is ? -> ?)
a.n:2:39:2:51: ←[01;31merror←[0m: cannot find any suitable indexer in 'List' (type is ? -> ?)
a.n:2:39:2:43: ←[01;31merror←[0m: typing fails on ambiguity between overloads:a.n:2:39:2:43: ←[01;32mhint←[0m: Posible overload: constructor System.Collections.Generic.List..ctor(collection : System.Collections.Generic.IEnumerable[T]) : System.Collections.Generic.List.[T]
a.n:2:39:2:43: ←[01;32mhint←[0m: Posible overload: constructor System.Collections.Generic.List..ctor(capacity : int) : System.Collections.Generic.List.[T]
a.n:2:39:2:43: ←[01;32mhint←[0m: Posible overload: constructor System.Collections.Generic.List..ctor() : System.Collections.Generic.List.[T]a.n:2:39:2:51: ←[01;31merror←[0m: cannot find any suitable indexer in 'List' (type is ? -> ?)
a.n:2:39:2:51: ←[01;31merror←[0m: typing fails on delayed typing of indexerconfused by earlier errors bailing out

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Точка в генерик типе
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.11 17:33
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Компилятор разрешает в первом указании типа не писать ".", однако во втором и в третьем случае обязывает.


Можно. Заставить писать точку всегда.

__>Можно ли улучшить эту ситуацию?

__>Например, введя дополнительные эвристики:

__>
__>В выражении A[B](...), ежели A и B типы, и A обобщенный тип, то это выражение трактуется как A.[B](...).
__>


Какая это эвристика? Это попытка разрешения неоднозначности за счет типизации.

ЗЫ

Главное что все это фиг не нужно никому. Просто не нужно явно указывать параметры типов и все. Компилятор и так все отлично выводит.

Тратить время на эту фигню просто не целесообразно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Точка в генерик типе
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.11 17:34
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Иначе, если забыть поставить точку получим фейерверк:...


А ты попробуй забыть поставить не только точку, но и все остальное.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Точка в генерик типе
От: _nn_ www.nemerleweb.com
Дата: 22.09.11 07:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _nn_, Вы писали:


__>>Компилятор разрешает в первом указании типа не писать ".", однако во втором и в третьем случае обязывает.


VD>Можно. Заставить писать точку всегда.


Тогда будет тем более странным почему нельзя синтаксис сделать в виде Тип.<Тип>


Не писать тип это решение, тогда это нужно добавить в статью отличия C# от Nemerle.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.