SORU
18 Kasım 2011, Cuma


Neden Ruby hash anahtarları sembolleri olarak kullanmak?

Kez bir sürü insan Ruby bir karma anahtarları gibi semboller kullanın.

Bir dize kullanarak avantajı nedir?

E. g.:

hash[:name]

vs

hash['name']

CEVAP
18 Kasım 2011, Cuma


Kısa cevap:

Sadece sembolleri kullanarak sadece bir kez depolandığından karşılaştırmaları yaparken zaman kazandırır, ama aynı zamanda hafıza kaydeder.

Ruby bir semboldürtemelde< . "değişmez dize".. demek ki onlar değil değişti, ve anlamına geleceği aynı sembol zaman başvurulan birçok kez boyunca kaynak kodu, her zaman saklı olarak aynı varlık, örneğin, aynı nesne kimliği.

Öte yandan dizeleri değiştirilebilirher zaman değiştirilebilir. Bu da anlaşılacağı Ruby ihtiyaçları için mağaza her dize söz boyunca kaynak kod içinde ayrı bir varlık, örneğin bir dize "name" birden çok kez belirtilen kaynak kodu, Ruby ihtiyaçlarına saklamak bunların hepsi ayrı String nesneleri, çünkü onlar değişikliği daha sonra (bu doğanın bir Ruby string).

Eğer kullandığınız bir dize Karma bir anahtar, Ruby ihtiyaçlarını değerlendirmek için dize ve bak bu dizinin içeriğini (ve hesaplamak için bir hash fonksiyonu olan) ve karşılaştırma sonucu karşı (karma) değerleri tuşlarını zaten kayıtlı Karma.

Eğer kullandığınız bir sembol olarak bir Hash anahtarı, örtülü işte bu değişmez, bu yüzden Ruby temelde sadece bir karşılaştırma (hash fonksiyonu) nesne kimliği karşı (karma) nesne kimliği anahtarları zaten kayıtlı Karma. (daha hızlı)

Dezavantajı: Her sembol asla serbest Ruby yorumlayıcı sembolü tablo, bir yuva tüketir. Semboller asla çöp toplanır. Semboller (otomatik oluşturulan örneğin olanları) büyük bir sayı olduğunda köşe durum yani. Bu durumda bu Ruby yorumlayıcı boyutunu nasıl etkilediğini değerlendirmek gerekir.

Notlar:

Eğer dize karşılaştırmaları yaparsanız, Ruby onları değerlendirmek zorunda kalmadan sadece nesne kimliklerine göre semboller karşılaştırın. Bu değerlendirilmesi gereken karşılaştırma dizeleri, çok daha hızlı.

Seni bir karma erişimi, Ruby her zaman "karma anahtarı kullanmak ne olursa olsun". bir hesaplamak için karma işlevi uygular MD5-karma gibi bir şey hayal edebilirsiniz. Ve sonra Ruby o "" birbirimize karşı. anahtarları karma karşılaştırır

Uzun cevap:

http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/

http://www.randomhacks.net/articles/2007/01/20/13-ways-of-looking-at-a-ruby-symbol

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bokeh

    Bokeh

    9 HAZİRAN 2014
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • ShoSho

    ShoSho

    20 Ocak 2010