I sindacati discriminati e altri tipi primitivi in F # utilizzano l'uguaglianza strutturale per impostazione predefinita e forniscono un override generato per il metodo .Equals. L'operatore di uguaglianza F # differisce da C# in quanto utilizza il metodo .Equals anche per i tipi di riferimento, ma quando vengono utilizzati i sindacati discriminati F # da C#, viene utilizzato l'operatore predefinito == per oggetto, che controlla l'uguaglianza di riferimento anziché uguaglianza strutturale.Perché F # non fornisce un sovraccarico personalizzato per l'operatore ==?
Perché F # non genera un operatore personalizzato == per i tipi di unione discriminati in modo che == fornisca il comportamento previsto quando viene utilizzato in altri linguaggi .NET?
Ma sicuramente, operatore == deve essere visto come un concetto NET piuttosto che un # concept C e F # ha bisogno di bel gioco con il resto del .NET ... – SoftMemes
L'operatore '==' è un C# cosa Hanno usato nomi diversi ('=' vs '==') proprio perché fanno cose diverse, ed è ereditato da OCaml che lo ha fatto. –
@Jon - mentre è vero, il team F # ha fatto in modo che gli operatori aritmetici comuni funzionassero attraverso le lingue (ad esempio '(+)' viene tradotto in 'op_Addition', che è ciò che C# riconosce). Avrebbero potuto generare un metodo 'op_Equality' altrettanto facilmente. – kvb