PHP olduğu gibi Ruby olası çok boyutlu karma dizi otomatik başlatma, mi?

0 Cevap php

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

  1. http://stackoverflow.com/questions/1503671/ruby-hash-autovivification-facets
  2. http://trevoke.net/blog/2009/11/06/auto-vivifying-hashes-in-ruby/
  3. http://www.eecs.harvard.edu/~cduan/technical/ruby/ycombinator.shtml

0 Cevap