Странным показалось поведение F#. В небольшом проекте решил попробовать реализовать алгоритмы на F#. Сущности были описаны code first entity framework. Одна из сущностей, а именно Вершина графа, должна была послужить ключем в структуре map в коде F#. Для этого вершине нужно было дописать методы:
public int CompareTo(Vertex that)
{
return this.ID.CompareTo(that.ID);
}
public int CompareTo(object other)
{
return 0;
}
Потом оказалось, что если переводишь последовательность вершин в map
verteces |> Seq.map(fun r -> r,-1.0) |> Map.ofSeq
, вызываются не первые методы, а вторые. Приходится править код:
public int CompareTo(Vertex that)
{
return this.ID.CompareTo(that.ID);
}
public int CompareTo(object other)
{
if (other is Vertex)
return this.ID.CompareTo((other as Vertex).ID);
else
return 0;
}
Ничего страшного, просто меня это удивило.
Почему не вызывается изначально первый метод?!