A syntax question about nested 'each' blocks

S

stephen.tashiro

Would someone explain the syntax of nested blocs vis-a-vis the use of
Array.each ?

I thought that 'lname' would be an element of an Array in the program
below. But the interpreter (ruby-1.8.4-1.fc3 in Fedora Core 3) tells
me it is the entire Array.

first_name = Array.[]( "Joe ","Albert ","Lilly ","Henry ","Becky
","Ray ")
last_name = Array.[]( "Groster", "Riplaid", "Pewley", "Lundrund",
"Banks" }}

tmp_name = "long string of nothing"

first_name.each { |fname|

last_name.each { |lname|

tmp_name = fname
# tmp_name = fname + lname # This produces a syntax error
# puts(tmp_name)

puts( lname.inspect)

}

}
 
J

Jeff Cohen

unknown said:
Would someone explain the syntax of nested blocs vis-a-vis the use of
Array.each ?

Your code works for me, but I had to first replace the }} with ) at the
end of your last_names definition. I also removed Array.new which is
unneeded, though you can keep that if you want:

first_name = [ "Joe ","Albert ","Lilly ","Henry ","Becky ","Ray " ]
last_name = [ "Groster", "Riplaid", "Pewley", "Lundrund", "Banks" ]

Jeff
www.softiesonrails.com
 
S

stephen.tashiro

Thanks. My code works for me too, with your corrections! But does it
work for you to use

last_name = %w{ Groster Riplaid Pewley Lundrund Banks }

(as in Programming Ruby 1st Ed p 10 )
That's what I had before I mangled it in my experimentations.
 
S

stephen.tashiro

.... I meant:

last_name = Array.new[] %w{ Groster Riplaid Pewley Lundrund Banks}

It does work for me if I leave out Array.new[]
 
S

stephen.tashiro

.... or rather
last_name = Array.[] %w { Groster Riplaid Pewley Lundrund Banks }

(I'm beginning to see that Ruby syntax is rather like bash syntax, but
only in that almost anything you type will at least start to do
something.)
 
R

Robert Klemme

Thanks. My code works for me too, with your corrections! But does it
work for you to use

last_name = %w{ Groster Riplaid Pewley Lundrund Banks }

Yes.

robert
 
J

Jim Weirich

unknown said:
.... or rather
last_name = Array.[] %w { Groster Riplaid Pewley Lundrund Banks }

(I'm beginning to see that Ruby syntax is rather like bash syntax, but
only in that almost anything you type will at least start to do
something.)

Try:

last_name = Array.[] *%w{ Groster Riplaid Pewley Lundrund Banks }

Notice there is no space between the "%w" and "{". Also note the use of
the splat operator "*" to flatten the array into the argument list.

Without the splat, it is equivalent to:

Array[ %w{ a b } ] => Array[ [ 'a', 'b' ] ]

With the splat, it is equivalent to:

Array[ * %w{ a b } ] => Array[ 'a', 'b' ]

HTH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top