Forum: Ruby Confused about != operator overloading

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Chris Parker (Guest)
on 2006-03-02 21:28
(Received via mailing list)
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
Marcin MielżyÅ?ski (Guest)
on 2006-03-02 21:29
(Received via mailing list)
Chris Parker wrote:
>
>
> Chris
>

!= operator will use the == one

lopex
Pete Y. (Guest)
on 2006-03-02 23:56
(Received via mailing list)
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 Y.
Logan C. (Guest)
on 2006-03-03 00:29
(Received via mailing list)
On Mar 2, 2006, at 2:28 PM, Chris Parker wrote:

>
> 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
Chris Parker (Guest)
on 2006-03-03 19:31
(Received via mailing list)
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
This topic is locked and can not be replied to.