Confused about != operator overloading



I want to overload the != operator. I can overload the == operator. I
get this error when I try to run the code without commenting out the !=
operator overloading function:

CSP.rb:72: syntax error
def !=(other)

The actual code is simply:

def !=(other)


Does Ruby not allow overloading !=? Does Ruby just give you != from
==? This is a bit of a problem for my case because while != is the
opposite of ==, there is a significant time improvement for stopping as
soon as possible for !=.

Any help would be greatly appreciated.



Chris Parker wrote:


!= operator will use the == one




Ruby derives the != operator from the == operator. You can’t define
them separately.

But, more to the point, can you give some more details on what you’re
testing for equality/inequality? I’m fascinated to know what sort of
beast can be checked for inequality faster than for equality.


Pete Y.


On Mar 2, 2006, at 2:28 PM, Chris Parker wrote:

soon as possible for !=.

Any help would be greatly appreciated.


Is this fast enough?

def not_equal(other)
# optimized != that stops early

def ==(other)
not (not_equal(other))

so != gets turned into not (not (not_equal(other))) which is not
perfect but the “nots” should be relatively trivial


Thanks for the replies everyone.

It is helpful but kind of disappointing. I’ll explain more about my
problem and maybe there is some clean solution.

So I am trying to write a new language on top of Ruby (without writing
any C) for Constraint Satisfaction Problems.

X1 == X2, which X1 is of class CSPVar will return a CSPConstraint that
contains the information about that constraint. Obviously, I need to
overload != because returning something like true or false makes no
sense. I am using != needs to return a CSPConstraint object reflecting
the information about the constraint, not true or false. After I have
all of the variables, domains, and constraints, I then solve the

The obvious but incredibly ugly solution is something like:
Since I got ==, +, -, *, / all working like operators, it would be nice
to get != to work as well.

Let me know if you have any ideas. Also, I am really struggling to
understand why != can’t be overloaded. I understand providing a
default != which is just not(==), but completely not allowing the
overloading of != seems strange.