Информация об изменениях

Сообщение Re[5]: Эквивалентность record-ов от 19.10.2023 10:47

Изменено 19.10.2023 11:19 _FRED_

Re[5]: Эквивалентность record-ов
Здравствуйте, VladD2, Вы писали:

VD>…Да и для структурной эквивалентности (что и должна обеспечиваться для записей) не нужно совпадение типов. Достаточно совпадения полей и их значений. Так что это должно быть как опция.


Кажется, хороший пример нашёлся, объясняющий почему мне лично такое вот "структурной эквивалентности … не нужно совпадение типов" не нравится "по дефолту":
abstract record Expression { }
abstract record BinaryExpression(Expression Left, Expression Right) { }
sealed record BinaryPlusExpression(Expression Left, Expression Right) : BinaryExpression(Left, Right) { }
sealed record BinaryMinusExpression(Expression Left, Expression Right) : BinaryExpression(Left, Right) { }


Мне было бы странно вдруг получить, что экземпляр `BinaryPlusExpression` "эквивалентен" экземпляру `BinaryMinusExpression`. Не смотря на то, что данные там и там одинаковые, поведение (результат выполнения виртуальных методов) может быть разным.

Возможно, это вопрос терминологии и для рекордов не стоит применять понятие такой вот "структурной эквивалентности".
Re[5]: Эквивалентность record-ов
Здравствуйте, VladD2, Вы писали:

VD>…Да и для структурной эквивалентности (что и должна обеспечиваться для записей) не нужно совпадение типов. Достаточно совпадения полей и их значений. Так что это должно быть как опция.


Кажется, хороший пример нашёлся, объясняющий почему мне лично такое вот "структурной эквивалентности … не нужно совпадение типов" не нравится "по дефолту":
abstract record Expression { }
abstract record BinaryExpression(Expression Left, Expression Right) : Expression { }
sealed record BinaryPlusExpression(Expression Left, Expression Right) : BinaryExpression(Left, Right) { }
sealed record BinaryMinusExpression(Expression Left, Expression Right) : BinaryExpression(Left, Right) { }


Мне было бы странно вдруг получить, что экземпляр `BinaryPlusExpression` "эквивалентен" экземпляру `BinaryMinusExpression`. Не смотря на то, что данные там и там одинаковые, поведение (результат выполнения виртуальных методов) может быть разным.

Возможно, это вопрос терминологии и для рекордов не стоит применять понятие такой вот "структурной эквивалентности".