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
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"
Ö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
Ruby: Kolay Filtre Hash Anahtarları?...
Neden anonim fonksiyon tanımlama ve de...
Neden std::kullanmak std stack::varsay...
Nasıl node.js KİMLİĞİ olarak kullanmak...
Neden iyi bir fikir için dinamik olara...