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)
}
}
unknown wrote:
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
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.
… 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.)
… I meant:
last_name = Array.new[] %w{ Groster Riplaid Pewley Lundrund Banks}
It does work for me if I leave out Array.new[]
unknown wrote:
… 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
–
– Jim W.