[#401849] If statement — Masoud Ahmadi <lists@...>

Will anyone be able to point out what I am doing wrong.

15 messages 2012/12/02

[#401987] Trying to get "translator" to work — JD KF <lists@...>

So, basically, I'm trying to get the below code to work properly for

12 messages 2012/12/06

[#402012] Need help to select some listbox item in different listbox together — Jonathan Masato <lists@...>

Hello,

10 messages 2012/12/07

[#402045] if n belongs to set a and m belongs to set b repeat some steps, How? — "zubair a." <lists@...>

We can do so in java and similar languages like:

11 messages 2012/12/08

[#402078] Time.new(2001, 12, 3).to_i returns wrong value — Robert Buck <lists@...>

I am doing something that not many do, I am writing a database driver

9 messages 2012/12/09

[#402145] How I can create/extract a variable/hash into the current binding in Ruby? — Ramon de C Valle <rcvalle@...>

Hi,

12 messages 2012/12/12

[#402205] Wondering About Flatiron School — "Kevin Y." <lists@...>

Hi everyone!,

35 messages 2012/12/15
[#402207] Re: Wondering About Flatiron School — Chad Perrin <code@...> 2012/12/15

On Sat, Dec 15, 2012 at 11:51:08AM +0900, Kevin Y. wrote:

[#402214] Ruby quick reference arranged in ASCII sequence? — Old Grantonian <lists@...>

As a ruby beginner, I would be grateful for any links to a ruby

17 messages 2012/12/15

[#402226] print - and strip text between tags using Nokogiri — Paul Mena <lists@...>

I'm a Ruby Newbie trying to write a program to process thousands of HTML

13 messages 2012/12/15

[#402332] Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...>

Hello all,

37 messages 2012/12/19
[#402342] Re: Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...> 2012/12/20

First of all, thanks for the fast responses!

[#402352] Re: Perl to Ruby: regex captures to assignment. — Robert Klemme <shortcutter@...> 2012/12/20

On Thu, Dec 20, 2012 at 1:38 AM, Derrick B. <lists@ruby-forum.com> wrote:

[#402357] Re: Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...> 2012/12/20

Robert Klemme wrote in post #1089733:

[#402359] trying to strip characters from a line — Paul Mena <lists@...>

I'm reading a table from a MySQL database and then processing it row by

18 messages 2012/12/20

[#402394] simple division: -9 / 5 = -2 what? — "Derrick B." <lists@...>

$ irb

13 messages 2012/12/22

[#402412] POLS and string-handling — Paul Magnussen <lists@...>

Hi,

14 messages 2012/12/22

[#402460] "Open" dialog of Windows — "Damián M. González" <lists@...>

Hi guys, been researching about pop up the "open" file dialog of

11 messages 2012/12/24

[#402466] How do I install Ruby on my Ubuntu 12.10 partition. — Kaye Ng <lists@...>

I already have Ruby installed on my Windows 7 partition.

23 messages 2012/12/25

[#402510] Ruby Association Certified Ruby Programmer — Sean Westfall <lists@...>

How well respected is this certification in the industry: Ruby

27 messages 2012/12/27
[#402528] Re: Ruby Association Certified Ruby Programmer — Peter Hickman <peterhickman386@...> 2012/12/27

On 27 December 2012 01:28, Sean Westfall <lists@ruby-forum.com> wrote:

[#402555] numeric? — Brandon Weaver <keystonelemur@...>

I've found a bit of an annoyance trying to find out if a number is numeric

20 messages 2012/12/27

[#402580] Ruby Koans regarding Hashes. — "Derrick B." <lists@...>

I am trying to understand this, so let me know how I do. :) I know

18 messages 2012/12/28

[#402609] can't open new ruby program under "new" context menu — "Lee V." <lists@...>

I'm stuck on the new version at trying to do something very simple.

10 messages 2012/12/28

[#402642] require "test/unit" — "Mattias A." <lists@...>

Hi,

17 messages 2012/12/29
[#402667] Re: require "test/unit" — "Mattias A." <lists@...> 2012/12/31

Hi Dami=C3=A1n M. Gonz=C3=A1lez!

[#402747] Re: require "test/unit" — "Derrick B." <lists@...> 2013/01/04

Mattias A. wrote in post #1090700:

[#402749] Re: require "test/unit" — sto.mar@... 2013/01/04

Am 04.01.2013 19:48, schrieb Derrick B.:

Re: Ruby Koans regarding Hashes.

From: "Derrick B." <lists@...>
Date: 2012-12-28 17:17:49 UTC
List: ruby-talk #402606
7stud -- wrote in post #1090450:

>
> 1) You never write
>
> Hash.new([])
>
> .. (or with any other mutable type as the argument) because the same
> array is the default for every key, and that is never useful.
>

That makes sense, and I got that same uselessness feeling when I saw the
assertions made against different indexes.

>
> This is what you want:
>
> hash = Hash.new {|hash, key| hash[key] = []}
>
> hash[:one] << 'hello'
> hash[:two] << 'goodbye'
>
> p hash
>
> --output:--
> {:one=>["hello"], :two=>["goodbye"]}
>

That was actually the very next test block in that "about_hashes.rb"
Koans file:

  def test_default_value_with_block
    hash = Hash.new {|hash, key| hash[key] = [] }

    hash[:one] << "uno"
    hash[:two] << "dos"

    assert_equal ["uno"], hash[:one]
    assert_equal ["dos"], hash[:two]
    assert_equal [], hash[:three]
  end

>
> In this case, the block executes *every time* you access a
> non-existent key, and the block creates a new array
> and assigns it to the key, *and* the return value is a
> reference to the array that was assigned to the key.
> As a result, all you need to do is append to the array.
>

This is one of those "I get it, but then I do not get it" paradoxes.  I
understand whatever is returned from the block is assigned to "hash",
right?  So, inside the block, a hash key is generated with an array as
its value:

hash[key] = []

But, since an append method was used, the value being appended, in this
case "uno" or "dos", now becomes the value for whatever key index, :one
or :two, is provided:

hash[:one] = ["uno"]

Since the block is executed every time, a new array object is created,
so each key has different array object id.  So this:

hash = hash[:one] = ["uno"]

Did this:

Unique array id  ([]), appended with a string ("uno"), assigned to hash
key (:one), assigned to variable (hash).

> It can be useful to use the first type of hash creator with non-mutable
> types as an argument:
>
> hash = Hash.new 0
>
> hash[:one] += 1
> hash[:two] += 1
>
> p hash
>
> --output:--
> {:one=>1, :two=>1}

Or as an accumulator:

>> hash = Hash.new 0
=> {}
>> hash[:one]
=> 0
>> hash[:one] += 1
=> 1
>> hash[:one]
=> 1
>> hash[:one] += 1
=> 2
>> hash[:one] += 1
=> 3
>> hash[:one] += 1
=> 4

...which I currently have no idea how that could be useful, but it is
still interesting...  heh

Looks like I am not the only one that found that Ruby Koans lesson a bit
confusing:

http://stackoverflow.com/questions/9537714/rubykoans-confusing-hash-example
http://stackoverflow.com/questions/9343680/how-does-shovel-operator-work-in-ruby-hashes/9343737#9343737

Thanks, that helped clear some things up.

-- 
Posted via http://www.ruby-forum.com/.

In This Thread