Confused about != operator overloading

C

Chris Parker

Hi,

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)

end

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
 
M

Marcin Mielżyński

Chris said:
Hi,

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)

end

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

!= operator will use the == one

lopex
 
P

Pete Yandell

Chris,

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.

Cheers,

Pete Yandell
 
L

Logan Capaldo

Hi,

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)

end

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

Is this fast enough?

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

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

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

Chris Parker

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
problem.

The obvious but incredibly ugly solution is something like: X1.ne(X2).
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.

Chris
 

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
474,166
Messages
2,570,902
Members
47,443
Latest member
RobertHaddy

Latest Threads

Top