2008/11/16 Chad P. [email protected]:
I don’t think so.
The more I look at it, the more ambiguous it appears to be.
That’s the usual effect of staring at a sentence for too long.
magical number plucked out of the air, makes it sound like it moves the
read position to a line whose ordinal position is that of the specified
line number. In other words, that’s how it “sounded” to me.
Yes, but the example makes it pretty clear that this is not the way it
lineno= because file reading obviously continues at the position where
it was before.
It only makes that clear if you assume a lot of things about what’s in
the file in question. I can see now, in retrospect, how you came to that
conclusion – but the fact that the second use of
f.gets returns “This
is line two\n” doesn’t necessarily mean that the return value is from
the second line of the file.
Of course not. But what sense would it make to create a file with a
different content that would return “This is line two\n” when
explaining how lineno= works? The most obvious explanation is that
someone created a file where “This is line two” is actually placed in
the second line to demonstrate the non effect on file position.
I read it, initially, as meaning that
whatever line of the file it was, it just happened to say “This is line
two\n” because that made for some convenient text to have in the example.
Actually I believe the other interpretation is much more
straightforward and reasonable.
Since the contents of the file were not made clear in advance, the
assumption that only the second line of the file can possibly say “This
is line two\n” does not clarify anything for the reader except by
accident. It could just mean “This is the second line of output from
See above. IMHO only a bit application of common sense will show you
that your reasoning goes a bit astray here - although from a formal
point of view you are right.
I would think if it had the behavior you described, the second time
f.gets is called, we would see: “This is line one thousand and one\n”
not “This is line two\n”
Right (if by “you” you do not mean Tim, somehow part of the thread is
missing in Usenet).
I don’t see why everyone has to assume that the second line of the file
necessarily contains the text “This is line two\n”. It’s really very
… for you.
If you want a program that outputs “This is line one\nThis is
line two\n”, and for some reason lines 0 and 1000 of the file contain
“This is line one\n” and “This is line two\n” respectively, the alternate
interpretation of the way the method works makes perfect sense.
Formally speaking yes, with a bit of common sense, no.
What doesn’t make any sense to me is the idea that, for some reason,
it’s important and common enough an operation to misnumber line numbers
that there has to be a
lineno= method that counterfeits line numbers.
What the hell is the point of that? Please explain that to me.
I do not know this. IO#lineno= can help implementing ARGF although it
is not needed. Maybe ARGF is completely implemented in Ruby and
delegates to C code for the IO handling - including line counting. In
that case it’s handy to have this setter so you can offset the line
number of the next opened file.