Hash javascript-like

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


JavaScript possiede, come molti linguaggi di alto livello, una struttura dati rappresentante un Hash/dizionario.

Un hash viene creato e si usa piu’ o meno come in ruby:
 var mioHash = {};
 mioHash["kiave"] = "valore";
Ma, nel caso la chiave sia una stringa valida anche come identificatore (cioe’ se contiene solo valori alfanumerici e “_“) si puo’ usare questa sintassi:
 mioHash.kiave = "valore";
In ruby, questo comportamento e’ molto semplice da ottenere, usando method_missing(). Il metodo method_missing(), se definito in una classe, viene richiamato ogni volta che su di un’istanza di quella classe viene richiamato un metodo che non esiste. Come parametri gli vengono passati: # un simbolo rappresentante il nome del metodo # un array contenente i parametri passati al metodo # un eventuale blocco passato al metodo Ad esempio:
 >> class Mia
 >>  def method_missing(sym,*args,&blk)
 >>    puts 'chiamato: '+sym.to_s
 >>    puts 'con argomenti: '+args.inspect
 >>    puts 'ed un blocco' if blk
 >>  end
 >> end
 => nil
 >> m=Mia.new
 => #<Mia:0x27762c8>
 >> m.ciao
 chiamato: ciao
 con argomenti: []
 => nil
 >> m.ciao 1 ,2 ,3
 chiamato: ciao
 con argomenti: [1, 2, 3]
 => nil
 >> m.ciao(1 ,2 ,3) { lol }
 chiamato: ciao
 con argomenti: [1, 2, 3]
 ed un blocco
 => nil
Dunque, ci basta definire questo metodo in maniera appropriata per la class Hash:
 >> class Hash
 >>  def method_missing(sym,*args,&blk)
 >>    self[sym.to_s]
 >>  end
 >> end
 => nil
 >> hsh={}
 => {}
 >> hsh['ciao']='bau'
 => "bau" 
 >> hsh.ciao
 => "bau" 
Updated on November 26, 2005 13:11 by Ruby Fan (151.37.150.7)