[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

correct use of join?

Joseph Paish

7/13/2005 1:08:00 PM

when i run a (large) script i am writing, this is the output i get on the
screen (there are actually several hundred lines of output). note the "nil"
on the first line.

nil
["10/12/2001", "bought", "10000", "abc", "0.100", 0.2345, "17.43"]
["01/02/2005", "sold", "100", "widget2", "0.143", 0.4567, "22.45"]

assuming that each line of the output is called single_record, when i type
single_record.class, i find out that it is an Array. so far, so good.

when i include the line

puts single_record.join(" ")

in the script in order to print single_record out as a space-separated string,
i get the following message :

my_command_prompt$ ruby ~/ruby_dir/program_name.rb
nil
/my_command_prompt/ruby_dir/program_name.rb:377: undefined method `join' for
nil:NilClass (NoMethodError)
from /my_command_prompt/ruby_dir/program_name.rb:239:in `each'
from /my_command_prompt/ruby_dir/program_name.rb:239

when i use irb to do the example on the web page
http://pine.fm/LearnToProgram/?..., everything works perfectly.

if single_record is in fact an array (and single_record.class tells me it is),
what am i doing wrong? I have a feeling it has to do with the appearance of
the word "nil" in the first line of output.

thanks

joe



3 Answers

Robert Klemme

7/13/2005 1:20:00 PM

0

Joseph Paish wrote:
> when i run a (large) script i am writing, this is the output i get on
> the screen (there are actually several hundred lines of output).
> note the "nil" on the first line.
>
> nil
> ["10/12/2001", "bought", "10000", "abc", "0.100", 0.2345, "17.43"]
> ["01/02/2005", "sold", "100", "widget2", "0.143", 0.4567, "22.45"]
>
> assuming that each line of the output is called single_record, when i
> type single_record.class, i find out that it is an Array. so far, so
> good.
>
> when i include the line
>
> puts single_record.join(" ")
>
> in the script in order to print single_record out as a
> space-separated string, i get the following message :
>
> my_command_prompt$ ruby ~/ruby_dir/program_name.rb
> nil
> /my_command_prompt/ruby_dir/program_name.rb:377: undefined method
> `join' for nil:NilClass (NoMethodError)
> from /my_command_prompt/ruby_dir/program_name.rb:239:in `each'
> from /my_command_prompt/ruby_dir/program_name.rb:239
>
> when i use irb to do the example on the web page
> http://pine.fm/LearnToProgram/?..., everything works perfectly.
>
> if single_record is in fact an array (and single_record.class tells
> me it is), what am i doing wrong? I have a feeling it has to do with
> the appearance of the word "nil" in the first line of output.

Obviously the first time you access single_record it's nil. And nil
doesn't join. You can do several things:

puts single_record && single_record.join(" ")
single_record and puts single_record.join(" ")
puts single_record.join(" ") if single_record
puts single_record.to_a.join(" ")

and probably a lot more. But maybe it's just a bug that lead to the nil
and it normally cannot happen.

Kind regards

robert

Joseph Paish

7/13/2005 1:32:00 PM

0

On July 13, 2005 07:20, Robert Klemme wrote:
> Joseph Paish wrote:
> > when i run a (large) script i am writing, this is the output i get on
> > the screen (there are actually several hundred lines of output).
> > note the "nil" on the first line.
> >
> > nil
> > ["10/12/2001", "bought", "10000", "abc", "0.100", 0.2345, "17.43"]
> > ["01/02/2005", "sold", "100", "widget2", "0.143", 0.4567, "22.45"]
> >
> > assuming that each line of the output is called single_record, when i
> > type single_record.class, i find out that it is an Array. so far, so
> > good.
> >
> > when i include the line
> >
> > puts single_record.join(" ")
> >
> > in the script in order to print single_record out as a
> > space-separated string, i get the following message :
> >
> > my_command_prompt$ ruby ~/ruby_dir/program_name.rb
> > nil
> > /my_command_prompt/ruby_dir/program_name.rb:377: undefined method
> > `join' for nil:NilClass (NoMethodError)
> > from /my_command_prompt/ruby_dir/program_name.rb:239:in `each'
> > from /my_command_prompt/ruby_dir/program_name.rb:239
> >
> > when i use irb to do the example on the web page
> > http://pine.fm/LearnToProgram/?..., everything works perfectly.
> >
> > if single_record is in fact an array (and single_record.class tells
> > me it is), what am i doing wrong? I have a feeling it has to do with
> > the appearance of the word "nil" in the first line of output.
>
> Obviously the first time you access single_record it's nil. And nil
> doesn't join. You can do several things:
>
> puts single_record && single_record.join(" ")
> single_record and puts single_record.join(" ")
> puts single_record.join(" ") if single_record
> puts single_record.to_a.join(" ")
>
> and probably a lot more. But maybe it's just a bug that lead to the nil
> and it normally cannot happen.
>
> Kind regards
>
> robert

fantastic.

i used this one since it is the clearest to me :

puts single_record.join(" ") if single_record

there is obviously a logic bug somewhere in the script, but getting it running
without errors was the first step.

thanks again

joe




Florian Groß

7/13/2005 1:53:00 PM

0