Я написал простой пример для своего сценария. Я создаю запись типа Switch
type State =
| On
| Off
with
member this.flip =
match this with
| On -> Off
| Off -> On
type Switch = { State : State }
, а затем пишу функцию, которая создает копию записи с одним измененным элементом
let flip switch = { switch with State = switch.State.flip }
To flip
много раз подряд я пишу
let flipMany times switch =
[1 .. times]
|> List.fold (fun (sw : Switch) _ -> flip sw) switch
If I хочу записать эти две функции в качестве методов, я пишу вместо этого
type Switch =
{ State : State }
member this.flip =
{ this with State = this.State.flip }
member this.flipMany times =
[1 .. times]
|> List.fold (fun (sw : Switch) _ -> sw.flip) this
Есть ли что-то неправильное в этом? Одинаково ли он эффективен? Вызывать функцию sw.flip
для разных объектов каждый раз неудобно.
Редактировать: это всего лишь простой пример, чтобы объяснить мой вопрос. Мой вопрос заключается в том, как функция flipMany
сравнивается с методом flipMany
в записи. Реализация может быть наивной, но она одинакова в обоих случаях.