match with string instead of regexp fails

M

matt neuburg

According to the 1.8.5 core API:

str =~ obj => fixnum or nil

Match. If obj is a Regexp, use it as a pattern to match against str. If
obj is a String, look for it in str (similar to String#index). Returns
the position the match starts, or nil if there is no match.

So I expect "cat" =~ "a" #=> 1

But:

irb(main):013:0> RUBY_VERSION
=> "1.8.5"
irb(main):014:0> "cat" =~ "a"
TypeError: type mismatch: String given
from (irb):14:in `=~'
from (irb):14
from :0

An undocumented change? Sorry if this has come up before, I did try to
find out. Thx - m.
 
J

Jan Svitok

According to the 1.8.5 core API:

str =~ obj => fixnum or nil

Match. If obj is a Regexp, use it as a pattern to match against str. If
obj is a String, look for it in str (similar to String#index). Returns
the position the match starts, or nil if there is no match.

So I expect "cat" =~ "a" #=> 1

But:

irb(main):013:0> RUBY_VERSION
=> "1.8.5"
irb(main):014:0> "cat" =~ "a"
TypeError: type mismatch: String given
from (irb):14:in `=~'
from (irb):14
from :0

An undocumented change? Sorry if this has come up before, I did try to
find out. Thx - m.

In the CVS [1] there's a new documentation omitting the 'string'
clause, so I suppose it's a documentation error.

If you know a bit of C you can see for yourself.

From the CVS history - the TypeError was added around 1.8.2, so it's
there pretty long.

The doc was fixed between 1.8.5-pre1 and 1.8.5-pre2. Form that it
seems that the docs on ruby-doc are rather old, and not exactly 1.8.5
ones as they say...

[1] http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/string.c?rev=1.182.2.53;content-type=text/plain
 
M

matt neuburg

Jan Svitok said:
According to the 1.8.5 core API:

str =~ obj => fixnum or nil

Match. If obj is a Regexp, use it as a pattern to match against str. If
obj is a String, look for it in str (similar to String#index). Returns
the position the match starts, or nil if there is no match.

So I expect "cat" =~ "a" #=> 1

But:

irb(main):013:0> RUBY_VERSION
=> "1.8.5"
irb(main):014:0> "cat" =~ "a"
TypeError: type mismatch: String given
from (irb):14:in `=~'
from (irb):14
from :0

An undocumented change? Sorry if this has come up before, I did try to
find out. Thx - m.

In the CVS [1] there's a new documentation omitting the 'string'
clause, so I suppose it's a documentation error.

If you know a bit of C you can see for yourself.

From the CVS history - the TypeError was added around 1.8.2, so it's
there pretty long.

The doc was fixed between 1.8.5-pre1 and 1.8.5-pre2. Form that it
seems that the docs on ruby-doc are rather old, and not exactly 1.8.5
ones as they say...

[1] http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/string.c?rev=1.182.2.53;
content-type=text%2Fplain

Excellent, thanks. m.
 

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

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top