[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Confused about != operator overloading

Chris Parker

3/2/2006 7:23:00 PM

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

4 Answers

Marcin Mielzynski

3/2/2006 7:28:00 PM

0

Chris Parker wrote:
> 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

Pete Yandell

3/2/2006 9:55:00 PM

0

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

On 03/03/2006, at 6:28 AM, Chris Parker wrote:

> 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 !=.



Logan Capaldo

3/2/2006 10:29:00 PM

0


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

> 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


Chris Parker

3/3/2006 5:26:00 PM

0

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