"should_not ==" vs "should !="

describe “should_not == vs. should !=”
it do
5.should_not == 6
end # passes

it do
5.should != 6
end # fails
end

I’m running the rspec 1.1.2 gem with the corresponding Textmate bundle

The second failure surprises me.

Is != not supported?

I’d like to hear what you all think.

On Jan 18, 2008 10:47 PM, David J. [email protected] wrote:

I’m running the rspec 1.1.2 gem with the corresponding Textmate bundle

The second failure surprises me.

Is != not supported?

Sadly, yes. It is not supported. Because Ruby does not support it.

When you say 5 == 3, what that is really saying is 5.==(3), which is
how we’re able to support 5.should == 3 (becomes 5.should.==(3)).

No such luck w/ !=.

C’est la vie.

Cheers,
David

On 19/01/2008, at 17:36 , David C. wrote:

When you say 5 == 3, what that is really saying is 5.==(3), which is
how we’re able to support 5.should == 3 (becomes 5.should.==(3)).

Would it be true to say that the reason “5.should != 3” won’t work is
that somewhere inside Ruby the x != y comparison is remapped to !(x
== y), and thus the “5.should != 3” is remapped to “not (5.should.==
3)”, with rspec generating a failure when “should” sees false coming
back from the “==” method?

Or am I barking up the wrong tree and potentially misleading dozens
of programmers down the garden path?

Alex

On Jan 20, 2008 8:01 PM, Alex S. [email protected] wrote:

Or am I barking up the wrong tree and potentially misleading dozens
of programmers down the garden path?

I’m 99 44/100% sure that you have it right. The expression x != y is
syntactic sugar for !(x == y) much like x += y is syntactic sugar for
x = (x +y)

The parser turns these into an internal representation (abstract
syntax tree for 1.8, byte-codes for 1.9) which is identical to the
second form.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

I’m 99 44/100% sure that you have it right. The expression x != y is
syntactic sugar for !(x == y) much like x += y is syntactic sugar for
x = (x +y)

The parser turns these into an internal representation (abstract
syntax tree for 1.8, byte-codes for 1.9) which is identical to the
second form.

In 1.8 it’s just syntactic sugar. But 1.9 provides actual != and !~
methods so that you can override it in situations like this.

(from Ruby-Core: http://www.ruby-forum.com/topic/134608 )

On Jan 21, 2008 8:22 AM, Jim L. [email protected] wrote:

methods so that you can override it in situations like this.
Oooooh. Good to know. We’re not 1.9 compatible yet, but when we get
there we’ll definitely add this!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs