не понятно
type X =
{ Name : string
Age: int
}
member this.PrintMe() => sprinft "Name: %s" this.Name
type Z() =
member val Name = ""
member val Age = 0
member this.PrintMe() => sprinft "Name: %s" this.Name
что характерно, оба еще и не структуры))
Ну в первом случае ты чётко очерчиваешь какие данные есть в типе, и больше их не будет. Остальное лишь проекция. Ну и сверх этого требования к "конструктору", эквивалентность и сравнение, если позволяет ситуация, автоматический принтер и т. д.
идеологически для рекордов есть несколько умолчаний - патерн матчинг по св-вам, валуе семантика (опеределено сравнение), претти принтинг и пр классы дают более низкоуровненвый контроль, как напишешь, так и будет
equality/comparison семантика например
для классов тоже же есть умолчания?:) и вроде переопределять их и в рекорде можно
мне на ум ничо не приходит
Смешение структур с эквивалентностью в C# - это косяк.
А, ну и рекорды sealed по-дефолту = хорошо
+100500 мозги засрали всем что структы - это валуе тайпы, когда структы использовались в 99% как мутируемые на стеке объекты для байтоёбов и ничего общего с валуе тайпами не имели
мне они за разным нужны, обычно структуры — для того чтобы ГЦ не овертаймил
А как вот эти вот фигурные скобки можно себе объяснить? Просто чуточку чужеродно смотрится
Всмысле? Ты алиасишь рекорд конкретным типом, даешь ему имя.
https://t.me/fsharp_chat/267471 Я про этот пример. У меня что-то пока в голове не стыкуется
Ну я же написал. Разница в том, как сравнение и экволити работает, и рекорд всегда sealed
Это я усвоил. Я больше про фигурные скобочки в первом варианте. В целом выглядит что ты объясняешь фигурные скобочки потому что рекорд, раз рекорд значит фигурные скобочки
Нууу более менее усвоил. Еще бы понять откуда исторически ноги растут и где тырили идеи(или сами)
https://en.wikibooks.org/wiki/Standard_ML_Programming/Types#Records
Обсуждают сегодня