Re[5]: Эквивалентность record-ов
От: _FRED_ Черногория
Дата: 19.10.23 10:47
Оценка: +1
Здравствуйте, 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`. Не смотря на то, что данные там и там одинаковые, поведение (результат выполнения виртуальных методов) может быть разным.

Возможно, это вопрос терминологии и для рекордов не стоит применять понятие такой вот "структурной эквивалентности".
Help will always be given at Hogwarts to those who ask for it.
Отредактировано 19.10.2023 11:19 _FRED_ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.