Hash python-like

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


Un Hash in python si chiama dict ma funziona in maniera quasi identica a quelli di ruby. La differenza fondamentale e’ nel fatto che quando cercate un elemento che non e’ stato ancora inserito ottenete un’eccezione invece di nil.

in ruby:
 >> hsh=Hash.new
 => {}
 >> hsh[0]
 => nil
in python:
 >>> hsh=dict()
 >>> hsh[0]
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
 KeyError: 0
fortunatamente, in entrambi i linguaggi possiamo creare delle sottoclassi che si comportino diversamente. In ruby, però, possiamo evitare di farlo, creando un singolo Hash che si comporti come desideriamo. Infatti ruby ci permette di associare come valore di default di un Hash una procedura, un blocco do..end, che verra’ eseguito ogni volta che richiamiamo una chiave non precedentemente definita. Il metodo e’ semplicissimo:
 >> hsh=Hash.new {   raise 'Errore!' }
 => {}
 >> hsh[0]
 RuntimeError: Errore!
         from (irb):31
         from (irb):31:in `call'
         from (irb):32:in `default'
         from (irb):32:in `[]'
         from (irb):32
         from :0
 >> hsh[2]
 RuntimeError: Errore!
         from (irb):31
         from (irb):31:in `call'
         from (irb):33:in `default'
         from (irb):33:in `[]'
         from (irb):33
         from :0
Ovviamente, se voleste fare le cose meglio potreste creare una classe KeyError , ma lascio a voi il piacere :)
Updated on November 26, 2005 13:20 by Ruby Fan (151.37.150.7)