Note: Testo rimosso dalla rev 1  e Testo aggiunto nella rev2

HashPythonLike

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.newhsh=Hash.new
 => {}
 >> hsh[0]
 => nil

in python:
 >>> hsh=dict()hsh=dict()
 >>> hsh[0]
 Traceback (most(most recent call last):last):
   File ”,"<stdin>", line 1,1, in ?
 KeyError:KeyError: 0

fortunatamente, in entrambi i linguaggi possiamo creare delle sottoclassi che si comportino diversamente. In ruby, pero’;,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


 >> hsh=Hash.new {   raise ‘Errore!’'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’
        `call'
         from (irb):32:in(irb):33:in `default’
        from (irb):32:in `[]’
        from (irb):32
        from ♥:0
	hsh2
	RuntimeError: Errore!
        from (irb):31
        from (irb):31:in `call’
        `default'
         from (irb):33:in `default’
        `[]'
         from (irb):33:in(irb):33
         from `[]’
        from (irb):33
        from ♥:0

:0 Ovviamente, se voleste fare le cose meglio potrestpotreste creare una classe KeyError , ma lascio a voi il piacere :)

Created on November 25, 2005 13:37 by il gruppo (256.256.256.256)