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 => nilDunque, 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"