[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Confusin with Hash default

From: Matthew Kerwin <matthew@...>
Date: 2013-06-23 06:40:20 UTC
List: ruby-talk #408429
I can answer the second part, but would have to this a bit about the first:

On 23 June 2013 16:17, Love U Ruby <lists@ruby-forum.com> wrote:
> I was doing some practice and play with Hash default value as written in
> the documentation.
>
>
> h = Hash.new([])
> h[:a] << 2
> h[:a] << 3
> h[:a] # => [2, 3]
>
> Till above is perfect.
>
> h # => {}
>
> Why the Hash h is empty hash here?
>
> h[:b] << 2
> h[:b] # => [2, 3, 2]
>
> How h[:b] is `[2, 3, 2]` instead of only `[2]` ?

Object references.

Try it like this:

  ary = []
  hsh = Hash.new(ary)
  hsh[:x] #=> []

  ary << 1
  hsh[:x] #=> [1]

Every "default" element of `hsh` contains a reference to the `ary`
object.  Similarly, in your original example, every default element of
`h` contained a reference to the unnamed array object.

At a _guess_ as to the first part:

h = Hash.new([])
# 1. you create an unnamed array object
# 2. you create a hash object, whose "default value" is a reference to
that array object
h[:a] << 2
# 3. h has no key :a, so `h[:a]` returns the default object (the
unnamed array) above
# 4. you call `<< 2` on that default object; so the unnamed array now
has one element
h[:a] << 3
# 5. (as above, now it has two elements)
h[:a] # => [2, 3]
# 6. h still has no key :a, so `h[:a]` returns the default object (the
unnamed array) above, which has the two elements you assigned it

h # => {}
# 7. at no point above did you *add* an element to h; all you did is
*get* an element (which didn't exist, so you always got the default),
so h remains empty

h[:b] << 2
# 8. like above: h has no key :b, so `h[:b]` returns the default object
# 9. you call `<< 2` on that object, so now it has 3 elements
h[:b] # => [2, 3, 2]
# 10. h still has no key :b, so `h[:b]` returns the default object,
which is an array with 3 elements

-- 
  Matthew Kerwin, B.Sc (CompSci) (Hons)
  http://matthew.kerwin.net.au/

In This Thread