SORU
10 Temmuz 2010, CUMARTESİ


F#: değişken vs ref izin

İlk olarak, bu soru bir kopyası şeklinde; sadece bana bildirin ihtimali kabul ediyorum.

"Uygulama" mutability istediğiniz zaman bu durumlar için. en iyi genel ne merak ediyorum F# sanki teklif iki tesis için: let mutable bağlama, sanki iş gibi değişkenleri "en" Dil ve referans hücre (oluşturulan ref fonksiyon) gerektirir açık kaldırma için kullanın.

Biri "" biri ya da diğeri: içine .zorunlu durumlarda bir çift vardır NET birlikte çalışma <- ile değişken kullanma eğilimi ve iş akışı hesaplamaları := ref kullanmak gerekir. Yani bu durumda gayet açık ve net güzel, ama bu senaryolar dışında kendi kesilebilir benim değişkenleri oluştururken ne yapacağını merak ediyorum. Avantajı, tek bir stil üzerinde ne var? (Bu uygulamaya belki de daha fazla anlayış yardımcı olacaktır.)

Teşekkürler! (Ve "aşırı" tırnak işareti.) için özür dilerim

CEVAP
10 Temmuz 2010, CUMARTESİ


Sadece ne destek veririmgradbotdedi - mutasyon ihtiyacım olduğunda let mutable tercih ederim.

İkisi arasında uygulama farklılıkları konusunda ref hücreleri aslında değişken bir plak alan içeren çok basit bir kayıt yürütür. Onları kolayca kendiniz yazabilirsiniz:

type ref<'T> =  // '
  { mutable value : 'T } // '

// the ref function, ! and := operators look like this:
let (!) (a:ref<_>) = a.value
let (:=) (a:ref<_>) v = a.value <- v
let ref v = { value = v }

Bir önemli fark arasındaki iki yaklaşım olduğunu let mutable depolar değişken değeri yığın (olarak bir değişken değişken C#) ref depolar değişken değer alan bir yığın tahsis kaydı. Bu performansı üzerinde bazı etkileri olabilir, ama herhangi bir numara yok...

Bu sayede ref kullanan değişken değerleri yumuşatılmış olabilir - iki oluşturabileceğiniz anlamı bu başvuru aynı değişken değerleri:

let a = ref 5  // allocates a new record on the heap
let b = a      // b references the same record
b := 10        // modifies the value of 'a' as well!

let mutable a = 5 // mutable value on the stack
let mutable b = a // new mutable value initialized to current value of 'a'
b <- 10           // modifies the value of 'b' only!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • NYLON Video

    NYLON Video

    11 Aralık 2006
  • PhoneArena

    PhoneArena

    7 NİSAN 2006