digitalmars.D.learn - Comparison
- Jonas Drewsen (8/8) Nov 26 2013 Isn't it a bug that the assertion is triggered for this:
- Namespace (7/15) Nov 26 2013 Because your Test3 class has probably no own opEquals method,
- Ary Borenszweig (6/25) Nov 26 2013 The ddoc for the method is wrong. It should say something like:
- Jonas Drewsen (8/39) Nov 28 2013 "does have the same contents as obj"
- Meta (4/46) Nov 29 2013 C++ is the odd one out here, I believe. Most OO languages compare
Isn't it a bug that the assertion is triggered for this: class Test3 {} void main() { assert( (new Test3()) == (new Test3()) ); } Tried it on http://dpaste.dzfl.pl/ as well. /Jonas
Nov 26 2013
On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen wrote:Isn't it a bug that the assertion is triggered for this: class Test3 {} void main() { assert( (new Test3()) == (new Test3()) ); } Tried it on http://dpaste.dzfl.pl/ as well. /JonasBecause your Test3 class has probably no own opEquals method, your comparison is the same as assert( (new Test3()) is (new Test3()) ); which is obviously wrong. See: https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
Nov 26 2013
On 11/26/13 7:00 PM, Namespace wrote:On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen wrote:The ddoc for the method is wrong. It should say something like: returns != 0 if this object has the same memory address as obj. Subclasses may override this method to provide custom equality comparison. Because for the OP, Test3 has the same contents as the other Test3 (both empty).Isn't it a bug that the assertion is triggered for this: class Test3 {} void main() { assert( (new Test3()) == (new Test3()) ); } Tried it on http://dpaste.dzfl.pl/ as well. /JonasBecause your Test3 class has probably no own opEquals method, your comparison is the same as assert( (new Test3()) is (new Test3()) ); which is obviously wrong. See: https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
Nov 26 2013
On Wednesday, 27 November 2013 at 00:46:30 UTC, Ary Borenszweig wrote:On 11/26/13 7:00 PM, Namespace wrote:"does have the same contents as obj" yes this is what confused me... and actually, it is a bit wierd coming from a c++ background that obj1 == obj2 is the same as (obj1 is obj2) and not per field comparison as expected (and documented). What is the reasoning behind this... principle of most astonishment? :)On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen wrote:The ddoc for the method is wrong. It should say something like: returns != 0 if this object has the same memory address as obj. Subclasses may override this method to provide custom equality comparison. Because for the OP, Test3 has the same contents as the other Test3 (both empty).Isn't it a bug that the assertion is triggered for this: class Test3 {} void main() { assert( (new Test3()) == (new Test3()) ); } Tried it on http://dpaste.dzfl.pl/ as well. /JonasBecause your Test3 class has probably no own opEquals method, your comparison is the same as assert( (new Test3()) is (new Test3()) ); which is obviously wrong. See: https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
Nov 28 2013
On Thursday, 28 November 2013 at 13:23:22 UTC, Jonas Drewsen wrote:On Wednesday, 27 November 2013 at 00:46:30 UTC, Ary Borenszweig wrote:C++ is the odd one out here, I believe. Most OO languages compare addresses by default.On 11/26/13 7:00 PM, Namespace wrote:"does have the same contents as obj" yes this is what confused me... and actually, it is a bit wierd coming from a c++ background that obj1 == obj2 is the same as (obj1 is obj2) and not per field comparison as expected (and documented). What is the reasoning behind this... principle of most astonishment? :)On Tuesday, 26 November 2013 at 21:37:49 UTC, Jonas Drewsen wrote:The ddoc for the method is wrong. It should say something like: returns != 0 if this object has the same memory address as obj. Subclasses may override this method to provide custom equality comparison. Because for the OP, Test3 has the same contents as the other Test3 (both empty).Isn't it a bug that the assertion is triggered for this: class Test3 {} void main() { assert( (new Test3()) == (new Test3()) ); } Tried it on http://dpaste.dzfl.pl/ as well. /JonasBecause your Test3 class has probably no own opEquals method, your comparison is the same as assert( (new Test3()) is (new Test3()) ); which is obviously wrong. See: https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L116
Nov 29 2013