[ruby-it] Hash con due elementi come chiave
Andrea Reginato
andrea.reginato a gmail.com
Ven 5 Dic 2008 17:45:06 CET
On Fri, Dec 5, 2008 at 5:05 PM, Njna Njna <v_orecchia a hotmail.com> wrote:
> ok ma quando basta mettere Hash{} e quando invece è necessario
> specificare tra parentesi una cosa del genere? {|h,k| h[k] = []}
>
Credo si stia fecendo un pochino di confusione.
Guardando la documentazione ufficiale sulla classe
Hash<http://www.ruby-doc.org/core/classes/Hash.html>se specifichi una
cosa del genere significa che per ogni chiave non
specificata avrai un array vuoto, cioè []. Ecco un esempio
irb(main):012:0> strade = Hash.new([])
=> {}
irb(main):013:0> strade['milano'] = {'roma' => 650}
=> {"roma"=>650}
irb(main):014:0> strade['milano']
=> {"roma"=>650}
irb(main):015:0> strade['bologna']
=> []
Come vedi, per la chiave Bologna non è ancora stata definita una chiave,
quindi mi ritorna il default che è stato definito come array vuoto, cioè [].
La seconda notazione che chiedi è un pochino più potente, ma in questo caso
non cambia nulla.
irb(main):016:0> strade = Hash.new{|h, k| h[k] = []}
=> {}
irb(main):017:0> strade['milano'] = {'roma' => 650}
=> {"roma"=>650}
irb(main):018:0> strade['milano']
=> {"roma"=>650}
irb(main):019:0> strade['bologna']
=> []
Se sei curioso troverai altro nella doc ufficiale per qualche caso più
complesso ;-)
--
Andrea Reginato, http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it
More information about the Ml
mailing list