Существует такая дихотомия в том, как мы можем создавать классы в f #, что меня действительно беспокоит. Я могу создавать классы, используя неявный или явный формат. Но некоторые функции, которые мне нужны, доступны только для использования в неявном формате, а некоторые доступны только для использования в явном формате.
Например:
Я не могу использовать let inline
* (или только let
) внутри явно определенного класса.
Единственный способ (который я знаю) определить неизменяемые публичные поля (не свойства *) внутри неявно определенного класса - это синтаксис val bla : bla
.
Но здесь есть избыточность. Так как в итоге я получу две копии одинаковых неизменяемых данных, одну закрытую, одну общедоступную (поскольку в неявном режиме параметры конструктора сохраняются на протяжении всего существования класса)
(Не очень актуально) Необходимость использования атрибутов для перегрузки метода и для значений по умолчанию для поля довольно неуместна.
Можно ли как-нибудь обойти это?
* Из соображений производительности
РЕДАКТИРОВАТЬ: Оказывается, я не прав в обоих пунктах (спасибо Ганеш Sittampalam & MichaelGG).
Хотя я не могу использовать let inline
как в неявном, так и в явном определении класса, я могу использовать member inline
очень хорошо, что, я полагаю, делает то же самое.
Очевидно, что в последней версии F # больше нет избыточности, поскольку все параметры, не используемые в теле класса, являются локальными для конструктора.
Уйдет в следующем выпуске F #.