Poniższy typ rozszerzeniebłędy rozszerzeń Rodzaj słownik <'K, 'V>
module Dict =
open System.Collections.Generic
type Dictionary<'K, 'V> with
member this.Difference(that:Dictionary<'K, 'T>) =
let dict = Dictionary()
for KeyValue(k, v) in this do
if not (that.ContainsKey(k)) then
dict.Add(k, v)
dict
daje błąd:
The signature and implementation are not compatible because the declaration of the type parameter 'TKey' requires a constraint of the form 'TKey : equality
Ale kiedy dodać ograniczenie daje błąd:
The declared type parameters for this type extension do not match the declared type parameters on the original type 'Dictionary<,>'
ten jest szczególnie tajemniczy, ponieważ następujące rozszerzenie typu nie ma ograniczenia i wor ks.
type Dictionary<'K, 'V> with
member this.TryGet(key) =
match this.TryGetValue(key) with
| true, v -> Some v
| _ -> None
Teraz mam dziwne myśli: czy ograniczenie jest wymagane tylko w przypadku dostępu do niektórych członków?
Nigdy bym do tego nie doszedł. Dlaczego inicjowanie słownika za pomocą porównywarki powoduje obejście ograniczenia równości? – Daniel
Dzięki, desco. Muszę zostać na nocnym czytaniu. – Daniel
@Daniel, podejrzewam, że czytanie specyfikacji późno w nocy prawdopodobnie miałoby odwrotny skutek niż pozostawanie w górze - przynajmniej dla mnie;) – Benjol