[Ironruby-core] object equality

William Green will at hotgazpacho.org
Thu Sep 9 07:10:25 EDT 2010


Then it would appear that in C#, using the != operator on two instances of
Ruby objects does not call the == method on the first Ruby object and invert
the result.

Can you switch to using equals as a work-around?

Not sure of the semantics around == vs .Equals in C#, but I know there is a
semantic difference between == and eql? in Ruby.

--
Will Green
http://hotgazpacho.org/



On Sep 9, 2010, at 6:52 AM, Davy Brion <ralinx at davybrion.com> wrote:

the problem isn't with checking wether 2 objects are equal (though you
indeed need to define an Equals method on your ruby object if you want the
comparison to work with a direct call to .Equals... doing == in C#
definitely uses the == method of your ruby object) but it is with the !=
check.  In ruby, using != calls == and inverts the result of that.  Doing !=
in C# on a ruby object doesn't seem to do the same thing.

I'm also not entirely sure how it _should_ be... but as far as i can tell,
right now, i can't get equality checks working properly with ruby objects.

if a == b is true, then a != b should always be false
if a.Equals(b) is true, then !a.Equals(b) should always be false

if there's another way to get this behavior working in C# for ruby objects,
i'd love to hear about it since it's pretty important for something i'm
trying to do :)

On Thu, Sep 9, 2010 at 12:20 PM, William Green <will at hotgazpacho.org> wrote:

> Testing for object equality in C# is different than it is in Ruby. In
> C#, you need to override both Object.Equals and Object.GetHashCode (I
> forget which is used when, but I do recall that the compiler complains
> if you override one and not the other). So, when you bring your Ruby
> object into C# and compare them, C# doesn't see an override for Equals
> on your object, and thus uses Object.Equals (which is often what you
> don't want). Try defining an equals method on your Ruby object, or
> alias it to ==.
>
> I suspect that the == method on your Ruby object does not map to
> Equals when you bring into C#. And I'm not sure that it should.
>
> Thoughts?
>
> --
> Will Green
> http://hotgazpacho.org/
>
>
>
> On Sep 9, 2010, at 4:33 AM, Davy Brion <ralinx at davybrion.com> wrote:
>
> > If i have the following class in ruby:
> >
> > class TestClass
> >   def initialize(value)
> >     @value = value
> >   end
> >
> >   def ==(other)
> >     return false if other.nil?
> >     self.value == other.value
> >   end
> >
> >   protected
> >
> >   def value
> >     @value
> >   end
> > end
> >
> > test1 = TestClass.new(5)
> > test2 = TestClass.new(5)
> > p test1 == test2
> > p test1 != test2
> >
> > the output is:
> > true
> > false
> >
> > if i do this in .NET:
> >
> > dynamic test1 = ruby.TestClass. at new(5);
> > dynamic test2 = ruby.TestClass. at new(5);
> >
> > var equals = test1 == test2;
> > var differs = test1 != test2;
> >
> > both equals and differs are true
> >
> > i'm going to create an issue about this, but i do need to get this
> working... is there a temporary workaround that i can use for now?
> > _______________________________________________
> > Ironruby-core mailing list
> > Ironruby-core at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/ironruby-core
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>

_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20100909/6b771857/attachment.html>


More information about the Ironruby-core mailing list