私は自分のシナリオの簡単な例を書きました。レコードタイプを作成しますSwitch
type State =
| On
| Off
with
member this.flip =
match this with
| On -> Off
| Off -> On
type Switch = { State : State }
次に、1つの要素が変更されたレコードのコピーを作成する関数を作成します
let flip switch = { switch with State = switch.State.flip }
何flip
度も書いています
let flipMany times switch =
[1 .. times]
|> List.fold (fun (sw : Switch) _ -> flip sw) switch
これらの2つの関数をメソッドとしてレコードに入れたい場合は、代わりに書き込みます
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
実装は単純かもしれませんが、どちらの場合も同じです。