lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

On 2017-09-05 03:58 PM, Dirk Laurie wrote:
2017-09-05 15:13 GMT+02:00 Shmuel Zeigerman <>:
I wonder why the first read from an empty file returns nil rather than an
empty string.
E.g. fp:read(10) --> nil

If the zero-sized file exists then it can be interpreted as a file
containing an empty string (IMHO).

An empty file is an exceptional file in the sense that its beginning
and its end is the same: position 0. fp:seek"set" and fp:seek"end"
put you in the same place.

To have fp:read(10) return nil when you are at the end of the file
is clearly the right thing to do. It is so much the right thing that
the exceptional behaviour of fp:read"a" is specifically documented
in the manual.

To have fp:read(10) return non-nil when you are reading for the
first time from an empty file would require that Lua needs to
know whether you are reading for the first time, not merely
that the file position is 0. Otherwise

repeat rec=fp:read(10) until not rec

will produce an infinite loop on an empty file (but not on others).

That's what fp:seek"set"==-1 is for :P

Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.