POLS violation? /\s*/ no match at StringScanner end

R

Robert Feldt

Hi,

I've been bitten by this discrepancy on some occasions:

irb(main):003:0> StringScanner.new("").match?(/\s*/)
=3D> nil
irb(main):004:0> /\s*/ =3D~ ""
=3D> 0

Running: ruby 1.8.4 (2005-12-24) [i686-linux]

Is it a bug or a feature?! I can see arguments for both sides but for
me it violates POLS. Opinions?

/Robert
 
C

Carlos

Robert said:
Hi,

I've been bitten by this discrepancy on some occasions:

irb(main):003:0> StringScanner.new("").match?(/\s*/)
=> nil
irb(main):004:0> /\s*/ =~ ""
=> 0

Running: ruby 1.8.4 (2005-12-24) [i686-linux]

Is it a bug or a feature?! I can see arguments for both sides but for
me it violates POLS. Opinions?

I think, if it matches /\s*/ at end of string, then it should scan it
too; and then, #eos? would never be true (you could scan /\s*/ at the
end infinitly).
 
R

Robert Feldt

Robert said:
Hi,

I've been bitten by this discrepancy on some occasions:

irb(main):003:0> StringScanner.new("").match?(/\s*/)
=3D> nil
irb(main):004:0> /\s*/ =3D~ ""
=3D> 0

Running: ruby 1.8.4 (2005-12-24) [i686-linux]

Is it a bug or a feature?! I can see arguments for both sides but for
me it violates POLS. Opinions?

I think, if it matches /\s*/ at end of string, then it should scan it
too; and then, #eos? would never be true (you could scan /\s*/ at the
end infinitly).
My point is that my POLS is that eos? should be true *and* you should
be able to scan any regexp that can match empty string infinitely at
the end. If not the behavior at the end is different than from within
which means that users need to handle the situation differently
depending on when such regexps are used.

But my POLS might be "wrong".

/R
 
A

Andrew Johnson

Robert Feldt wrote: [snip]
Is it a bug or a feature?! I can see arguments for both sides but for
me it violates POLS. Opinions?

I think, if it matches /\s*/ at end of string, then it should scan it
too; and then, #eos? would never be true (you could scan /\s*/ at the
end infinitly).
My point is that my POLS is that eos? should be true *and* you should
be able to scan any regexp that can match empty string infinitely at
the end. If not the behavior at the end is different than from within
which means that users need to handle the situation differently
depending on when such regexps are used.

While I can see your point, I don't see it as a POLS violation:

irb(main):014:0> lex = StringScanner.new("")
=> #<StringScanner fin>

The termination condition for a scanner is eos, and I would expect that
a terminated lexical scanner should consistently *not scan*, regardless of
whether a given pattern (eg, /\s*/, /\z/, /$/, //) could match at eos.

I do expect a different behaviour between a lexical scanner in the middle
of its input, and one that reached its termination condition.

However, the StringScanner docs aren't very explicit about this.
But my POLS might be "wrong".

ditto :)

andrew
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top