Ben bu yüzden bir karma atamak ve başlatılamıyor çok boyutlu diziler, PHP ile çalışmak için alışkı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';
Ruby benzer bir şey yapmak için bir yolu var mı? Ya da ilk olarak tüm boyutlarıyla başlatmak için, ve sonra değerleri atamak gerekir. Ben gerekenleri yapmak sağlayacak gelişmiş bir Hash tanımlamak mümkün mü? Bunu nasıl yapacaksın?
Update
Douglas (aşağıya bakınız) tarafından önerilen çözeltisine ek olarak, Brian Schröäer Hash
sınıfı için bir uzatma önermiştir ettiği, a thread on the subject bulduk:
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
Madde değeri yalnızca talep edildiğinde eksik karma öğesi istenmeyecek oluşturulduğunda zaman sorunu çözmek için izin verir, örneğin a['key']
.
Some additional references