Методы записи на F#

Я написал простой пример для своего сценария. Я создаю запись типа 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в записи. Реализация может быть наивной, но она одинакова в обоих случаях.

5
задан Panos 23 June 2012 в 21:18
поделиться