[ruby-it] Perché Hash#partition non restituisce due Hash?
Guido De Rosa
guidoderosa a gmail.com
Gio 3 Dic 2009 16:50:40 CET
Alessandro Scolavino wrote:
> ho dimenticato un pezzo :)
>
> è voluto in quanto partition non è un metodo di Hash ma di Enumerable,
> quindi può applicarsi a qualsiasi collection, di conseguenza sarebbe
> "incomprensibile" se restituisse valori differenti a seconda del tipo di
> collection (almeno a mio parere :) ).
Sì, ma allora lo stesso discorso si dovrebbe fare per select (che pure è
un metodo di Enumerable), e invece:
{'a' => 1, 'b' => 2, 'c' => 3}.select {|key, val| key < b or val > 2
}
restituisce:
{"a"=>1, "c"=>3}
In base al ragionamento che hai appena fatto, sarebbe dovuto essere:
[["a", 1], ["c", 3]]
In effetti, stando alla documentazione, scopro solo ora che select si
comporta diversamente in ruby1.8 e ruby1.9 (e io uso 1.9).
http://ruby-doc.org/core-1.8.7/classes/Hash.html#M000183
http://ruby-doc.org/ruby-1.9/classes/Hash.html#M000401
Sembrerebbe che in ruby1.9 select sia stato riscritto per la classe
Hash, mentre in 1.8 resta il risultato della mera inclusione di
Enumerable.
Mi verrebbe da dire, a questo punto, che l'"inconsistenza" è solo di
ruby1.9. Nel senso che i due statement:
scelti, scartati = hash.partition {|key, val| #blocco di codice... }
e
scelti = hash.select {|key, val| #stesso blocco di codice... }
dovrebbero ragionevolmente assegnare alla variabile "scelti" lo stesso
valore (Hash o Array che sia).
E invece ciò è vero solo per 1.8, non per ruby 1.9 ...
G.
--
Posted via http://www.ruby-forum.com/.
More information about the Ml
mailing list