Словарь не находит ключи, которые вводятся при использовании F # - PullRequest
0 голосов
/ 17 июня 2009

Хорошо, так это сводит меня с ума. как этот код может не работать?

open System.Collections.Generic
type testing (a:int)=
    let test = [Empty]
    member p.GetHashCode =
        fun () -> printfn "called hash";0

    override p.Equals(other:obj) =
        printfn "called equals"
        true
    interface IEquatable<testing> with
        override p.Equals(other:testing) =
            true
    static member op_Equality (other:obj) = printfn "called op" ;true   
let dict2 = new Dictionary<testing,int>()
dict2.[(testing 50)] <- 50
dict2.[(testing 50)]

Фрагмент умирает при попытке извлечь из словаря и не вызывает ни один из предоставленных методов. Я сегодня просто сумасшедший или здесь что-то не так?

1 Ответ

7 голосов
/ 17 июня 2009

Вы не использовали модификатор override на p.GetHashCode (в отличие от p.Equals). Мое F # -фу отсутствует, но для меня это звучит плохо. Распечатывает ли он "хеш"? Если нет, то это было бы причиной, я сильно подозреваю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...