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 <w...@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 <ral...@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.testcla...@new(5); > > dynamic test2 = ruby.testcla...@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@rubyforge.org > > http://rubyforge.org/mailman/listinfo/ironruby-core > _______________________________________________ > Ironruby-core mailing list > Ironruby-core@rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core >
_______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core