Sorry to bother you with this stupid and trivial question, but I’m a
rookie with ruby, and I can not understand why I get the undefined
method message.
I’ve been looking in the mailing list and I’ve not found any aceptable
answer, even I’ve asked Google, but the only answers are in Kanji and
Katakana, and unfortunatelly I don’t read japanese.
My problem is a very simple one, I’m writing small programs to learn but
in my first one I found that the interpreter complains that my semantics
are bad.
This is my program, a simple parser for the djbdns flat database
argfile=ARGV[0]
inFile= (argfile == nil or argfile.upcase == ‘STDIN’ ) ? STDIN :
File.new(argfile,‘r’)
firstChar=’‘
inFile.each_line { | line |
line.chomp!
firstChar=line[0].chr
arr=firstChar.to_a + line[1,line.size].split(’:’)
… More code here, but the interpreter accepts it
}
The interpreter says that
dns_process.rb:7: undefined method chr' for nil (NameError) from dns_process.rb:5:in
each_line’
from dns_process.rb:5
It seems that ruby understands that line[0] is a “nil” so he can not
find the “chr” method, when in fact “line” is a string and “line[0]” is
an integer, so “chr” is a right method for an integer, but ruby seems
not to understand this
Another problem
dns_process.rb:8: undefined method split' for nil (NameError) from t.rb:5:in
each_line’
from t.rb:5
Same problem, ruby does not understand that “line[1,line.size]” is a
string, so “split” is a right method for it
I’ve tested to put parentheses (line[0]).chr but this also does not
work and even to separate the methods a=line[0]; a.chr but also does not
work, ruby still thinks that it’s a “nil”. When I do a “test bed” in irb
with data, it works as expected.
I’m using ruby 1.6.6 on a Mandrake 8.2 system.
DOES ANYONE KNOW WHAT I’M DOING WRONG !!!
Please, an answer is needed, ruby is a wonderful language but it’s very
poorly documented, I’ve read the online “Programming Ruby” , and it’s
right to see how powerful ruby can be, but it’s not a very good help to
understand it deeply.
Does anyone know where to get better documentation ? What book is right?
I will buy one if I’m sure I’m spending my money right.
Thanks for reading this long question, and Thanks in advance for any answer.
Regards
Enric Lafont