f



regex =~ string or string =~ regex?

Sometime I saw you wrote regex =~ string, while sometime you wrote
string =~ regex.
What's their difference and what's the recommended way? Thanks.

Jenn.

0
rubynewbee (53)
1/4/2010 9:27:32 AM
comp.lang.ruby 48886 articles. 0 followers. Post Follow

3 Replies
3412 Views

Similar Articles

[PageSpeed] 7

On 01/04/2010 10:27 AM, Ruby Newbee wrote:
> Sometime I saw you wrote regex =~ string, while sometime you wrote
> string =~ regex.
> What's their difference and what's the recommended way? Thanks.

The first version invokes method Regexp#=~ and the second version 
invokes String#=~ - which happen to do roughly the same although I 
believe the second one to be a tad slower.  I personally prefer the 
first form because of the speed difference and regular expression 
matching is rather an operation of Regexp than of String.

Kind regards

	robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
0
shortcutter (5830)
1/4/2010 1:16:11 PM
Robert Klemme wrote:
> On 01/04/2010 10:27 AM, Ruby Newbee wrote:
>> Sometime I saw you wrote regex =~ string, while sometime you wrote
>> string =~ regex.
>> What's their difference and what's the recommended way? Thanks.
> 
> The first version invokes method Regexp#=~ and the second version
> invokes String#=~ - which happen to do roughly the same although I
> believe the second one to be a tad slower.  I personally prefer the
> first form because of the speed difference and regular expression
> matching is rather an operation of Regexp than of String.

Interesting.  Whereas I prefer the second because I think
mystring =~ /foo/
is syntactically analogous to
mystring == 'foo'

> 
> Kind regards
> 
>   robert

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
-- 
Posted via http://www.ruby-forum.com/.

0
marnen (270)
1/4/2010 5:43:32 PM
On Mon, Jan 4, 2010 at 6:20 AM, Robert Klemme
<shortcutter@googlemail.com> wrote:

> The first version invokes method Regexp#=3D~ and the second version invok=
es
> String#=3D~ - which happen to do roughly the same although I believe the
> second one to be a tad slower. =A0I personally prefer the first form beca=
use
> of the speed difference and regular expression matching is rather an
> operation of Regexp than of String.

Very technically speaking, calling the Regexp#=3D~ will be
microscopically faster because it avoids a tiny bit of C code that
gets executed when calling the String#=3D~ version. In practice though,
the difference is so small as to be invisible against the noise of the
rest of the system.

String#=3D~ just has a little sugar built in.

If it's passed a Regexp, then it just calls the C function underlying Regex=
p#=3D~.
If it is passed a String, it complains.
If it is passed anything else, it tries to call #=3D~ on what it was
passed, passing itself as the argument.  This lets one build custom
matching classes that Strings can use with the =3D~ syntax.


Kirk Haines

0
wyhaines (47)
1/4/2010 6:04:28 PM
Reply: