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:
>>in python:hsh=Hash.newhsh=Hash.new => {} >> hsh[0] => nil
>>>fortunatamente, in entrambi i linguaggi possiamo creare delle sottoclassi che si comportino diversamente. In ruby,hsh=dict()hsh=dict() >>> hsh[0] Traceback(most(most recent calllast):last): File“”,"<stdin>", line1,1, in ?KeyError:KeyError: 0
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):31from (irb):31:in`call’`call' from(irb):32:in(irb):33:in`default’ from (irb):32:in `[]’ from (irb):32 from ♥:0 hsh2RuntimeError: 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 :)