Дискриминационные союзы и другие примитивные типы в F # по умолчанию используют структурное равенство и предоставляют сгенерированное переопределение для метода .Equals. Оператор равенства F #, по-видимому, отличается от C# 1 тем, что использует метод .Equals даже для ссылочных типов, но когда используются F # дискриминационные союзы из C#, используется оператор по умолчанию == для объекта, который проверяет ссылочное равенство, а не структурного равенства.Почему F # не создает пользовательскую перегрузку для оператора ==?
Почему F # не генерирует пользовательский оператор == для дискриминированных типов объединения, так что == дает ожидаемое поведение при использовании на других языках .NET?
Но, конечно же, оператор == должен рассматриваться как концепция .NET, а не концепции C# и F # должен играть хорошо с остальной частью .NET ... – SoftMemes
Параметр '' == оператор является C# предмет. Они использовали разные имена ('=' vs '==') именно потому, что они делают разные вещи, и это унаследовано от OCaml, который сделал это. –
@Jon - в то время как это правда, команда F # удостоверилась, что общие арифметические операторы работают на разных языках (например, '(+)' переводится в 'op_Addition', что и распознает C#). Они могли бы сгенерировать метод 'op_Equality' так же легко. – kvb