Как правильно реализовать свойство в F #?
-
24-09-2019 - |
Вопрос
Рассмотрим мою первую попытку, простой тип на F # вроде следующего:
родовое словоТеперь я тестирую это с помощью C # (этот объект предоставляется проекту C #, поэтому очевидная семантика C # желательна):
родовое слово propName
назначен правильно, мой установщик F # работает, но второе утверждение не работает, поскольку базовое значение prop
не изменяется.Для меня это имеет смысл, потому что, если я удалю mutable
из поля prop
, ошибка не будет генерироваться (и одна из них должна быть из-за того, что я пытаюсь изменить значение).Думаю, мне не хватает фундаментальной концепции.
Как правильно выполнить повторную привязку / изменить код prop
в классе Test
, чтобы я мог пройти свой модульный тест?
Решение
Попробуйте это:
родовое слово Вам нужно сделать привязку изменяемой, а затем изменить ее значение в сеттере.В исходном коде вы просто создавали новую привязку (также называемую prop
) в своем сеттере, поэтому никаких изменений не было видно.
Другие советы
В качестве примечания, я бы, вероятно, использовал if .. then
вместо конструкции match
, поскольку она делает код более лаконичным (сопоставление patterh особенно ценно, когда вам нужно проверить значение против нескольких сложных шаблонов).Кроме того, public
- это доступ по умолчанию для member
, поэтому вы можете сделать код более лаконичным:
При сопоставлении с шаблоном вы фактически связываете новое значение с
родовое словоКогда вы связываете такое значение с тем же именем, оно затеняет другое значение для области только что объявленного.Я считаю, что вы действительно хотите сделать следующее:
родовое слово