Ben bu yüzden Ruby benzer bir şey yapmak için bir yolu var mı atamak vePHP'de olduğu gibi Ruby'de çok boyutlu karma dizisinin otomatik olarak başlatılması mümkün mü?
unset($a); // just to show that there is no variable $a
$a['settings']['system']['memory'] = '1 Gb';
$a['settings']['system']['disk space'] = '100 Gb';
tarafından bir karma başlatabilir çok boyutlu diziler, PHP ile çalışmak için alışkınım? Ya da önce tüm boyutları başlatmam ve ardından değerleri atamam gerekiyor. İhtiyacım olanı yapmamı sağlayacak gelişmiş bir Hash tanımlamak mümkün mü? Bunu nasıl yaptın?
class AutoHash < Hash
def initialize(*args)
super()
@update, @update_index = args[0][:update], args[0][:update_key] unless args.empty?
end
def [](k)
if self.has_key?k
super(k)
else
AutoHash.new(:update => self, :update_key => k)
end
end
def []=(k, v)
@update[@update_index] = self if @update and @update_index
super
end
end
:
Güncelleştirme Douglas (aşağıya bakınız) tarafından önerilen çözelti ek olarak
, Brian Schröäer Hash
sınıfı için bir uzantı önermiştir ettiği bir thread on the subject bulduk
Öğe değeri yalnızca talep edildiğinde, eksik bir karma öğe istenmeyen şekilde oluşturulduğunda, sorunun çözülmesini sağlar. a['key']
.
Bazı ek referanslar
- ruby hash autovivification (facets)
- http://trevoke.net/blog/2009/11/06/auto-vivifying-hashes-in-ruby/
- http://www.eecs.harvard.edu/~cduan/technical/ruby/ycombinator.shtml
PHP'li bir adamım ve Ruby hakkında çok az şey biliyorum, ama bence bu, PHP'nin diğer dillere aktarılmaması gereken korkunç özelliklerinden biri. :) (Neden böyle bir durumda bunu isteyeceğini anladım rağmen) –