SORU
25 Ocak 2011, Salı


Ruby'In Dosyası.açık ve f gerek.yakın

Dosyaları ile çalışmak için akışı aç-kullan-yakın çoğu programlama dilinde bunu herkes bilir. Henüz ruby kodları defalarca eşsiz bir Dosya gördüm.aramalar açık ve ayrıca yakut dokümanlar this gem of knowledge buldum:

O dere çöp toplayıcı tarafından talep olduğunda otomatik olarak kapanır.

darkredandyellowkonuyla ilgili: friendly ırc
[17:12] evet, ve ayrıca, dosya tanıtıcı sayısı genellikle işletim sistemi ile sınırlıdır
[17:29] sanırım kolayca dosya tanımlayıcıları kullanılabilir . dışarı çalıştırabilirsiniz ^em>önceçöp toplayıcı temizler. bu durumda, kapatmak Kendin kullanmak isteyebilirsiniz "çöp toplayıcı GC gelecekte bir noktada hareket eden" anlamına gelir.. tarafından iddia etti. ve pahalı. açıkça kapanış dosyaları için bir çok nedeni var.

  1. Açıkça kapatmak için ihtiyacımız var
  2. Evet o zaman neden GC autoclose mu ?
  3. Değilse o zaman neden seçenek?

CEVAP
25 Ocak 2011, Salı


Ruby kodları birçok kez File.open eşsiz çağrılarını gördüm

Bir örnek verebilir misiniz? Ben sadece şimdiye kadar olan kod yeni başlayanlar tarafından yazılmışolmamasıdosyaları ile çalışmak için akışı aç-kullan-yakın "çoğu programlama dilinde bilinen".

Açıkça dosyalarını kapatmak ya da, daha idiomatically, sizin için otomatik olarak dosyayı kapatır File.open, Blok şeklinde kullanım deneyimli Rubyists. Uygulama temelde bir şey bu gibi görünüyor:

def File.open(*args, &block)
  return open_with_block(*args, &block) if block_given?
  open_without_block(*args)
end

def File.open_without_block(*args)
  # do whatever ...
end

def File.open_with_block(*args)
  yield f = open_without_block(*args)
rescue
ensure
  f.close
  raise
end

Komut özel bir durumdur. Komut dosyaları genellikle çok kısa ve yalnızca işletim sistemi komut çıkar onları zaten kapanacak beri anlamda onları kapatmak için yapmıyor, o yüzden birkaç dosya tanımlayıcıları kullanın.

Açıkça kapatmak için ihtiyacımız var mı?

Evet.

Evet o zaman neden GC autoclose mu?

Nesne topladığı çünkü sonra dosya artık kapatmak için bir yol yoktur, ve böylece dosya tanıtıcı sızıntısı olur.

Dosyaları kapatan çöp toplayıcı değil unutmayın. Çöp toplayıcı sadece bu toplar önce bir nesne için herhangi bir sonlandırıcı yürütür. Sadece bu yüzden File sınıf dosyasını kapatan bir sonlandırıcı tanımlayan oluyor.

Değilse o zaman neden seçenek?

Çünkü harcanan bellek ucuz, ama boşa dosya tanıtıcı değil. Bu nedenle, duyu hafızası parçası yaşam için bir dosya tanıtıcı ömrü kravat yapmaz.

Sadece tahmin edemiyorne zamançöp toplayıcı çalışır. Tahmin bile edemezsinizeğerçalışırhiç: eğer hiç yetersiz bellek, çöp toplayıcı asla hiçbir zaman dosya kapanır bu nedenle sonlandırıcı hiç bitmeyecekmiş gibi, bu nedenle, çalışır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gamingbits

    gamingbits

    2 Mayıs 2006
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • Mr. H

    Mr. H

    1 Temmuz 2012