F #: Закрытие против частных ценностей - PullRequest
1 голос
/ 04 мая 2011

Предполагая, что никаких дальнейших модификаций или дополнений к следующему типу не будет, есть ли какое-либо преимущество в том, чтобы делать это в одну сторону по сравнению с другим (кроме меньшего количества печати и лучшей читаемости и эффективности второго примера)?

    type MyType<'T> (_initVal : 'T) =
        let getSetFns () =
            let value = ref _initVal
            (fun () -> value.Value), (fun _value -> value := _value)
        let getVal, setVal = getSetFns ()
        member this.Value with get () = getVal () and set _value = setVal _value

... или ...

    type MyType<'T> (_initVal : 'T) =
        let value = ref _initVal
        member this.Value with get () = value.Value and set _value = value := _value

1 Ответ

5 голосов
/ 04 мая 2011

Второй короче, так что я бы пошел на это. Возможно, вы захотите использовать let mutable вместо ссылочной ячейки, она будет немного более производительной (хотя вряд ли вы заметите большую разницу).

Чтобы дать немного больше контекста, использование замыканий для скрытия значений, как вы делаете в первом случае, является хорошей техникой, но здесь значение уже скрыто, так зачем беспокоиться о том, чтобы скрыть его снова?

...