Why doesn't Array include Comparable

why wouldn’t one want this?

harp:~ > cat a.rb
a = 0,1,2
b = 2,3,4

p a < b rescue puts “can’t do that!”

class Array; include Comparable; end

p a < b

harp:~ > ruby a.rb
can’t do that!
true

??

-a

[email protected] wrote:

class Array; include Comparable; end

p a < b

harp:~ > ruby a.rb
can’t do that!
true

??

Offhand I would guess it’s because arrays can
hold arbitrary objects.

If one array held four different classes of
objects, and another held yet another four
classes of objects, that’s potentially sixteen
spaceship operators that would need to be
defined for this to make sense. And most of
those would not make sense anyway.

Hal

On Aug 9, 2006, at 12:56 AM, Hal F. wrote:

true
those would not make sense anyway.

But spaceship is already defined for array (and it does the right
thing ™). If Array is going to make spaceship available, why not
include Comparable?

Indeed I have found it useful to

class Tuple < Array
include Comparable
end

But I also make it immutable.

T.

On Aug 9, 2006, at 7:22 AM, Logan C. wrote:

But spaceship is already defined for array (and it does the right
thing ™). If Array is going to make spaceship available, why
not include Comparable?

I have to agree. I know I’ve wanted it a couple of times now.

James Edward G. II

On Wed, 9 Aug 2006, Hal F. wrote:

Offhand I would guess it’s because arrays can
hold arbitrary objects.

If one array held four different classes of
objects, and another held yet another four
classes of objects, that’s potentially sixteen
spaceship operators that would need to be
defined for this to make sense. And most of
those would not make sense anyway.

i don’t understand - it’s up to to the objects inside the container to
impliment the right methods and array already knows how to handle it:

harp:~ > cat a.rb
a = 0, ‘foo’, 42
b = 1, ‘bar’, 42.0

p a < b rescue puts “can’t do that”

class Array; include Comparable; end

p a < b

p a.sort_by{ rand } < b.sort_by{ rand }

harp:~ > ruby a.rb
can’t do that
true
a.rb:9:in `<’: comparison of Array with Array failed (ArgumentError)
from a.rb:9

if you’re collections impliment <=> correctly then Array does the right
thing -
looping over each of them.

-a

[email protected] wrote:

those would not make sense anyway.

a.rb:9:in `<’: comparison of Array with Array failed (ArgumentError)
from a.rb:9

if you’re collections impliment <=> correctly then Array does the right
thing -
looping over each of them.

-a

FWIW, I modified the Array class to include Comparable and then ran both
the
test_array.rb file that’s distributed with the Ruby distro and my own
tests in
the ruby_test project and all tests still passed.

Regards,

Dan

This communication is the property of Qwest and may contain confidential
or
privileged information. Unauthorized use of this communication is
strictly
prohibited and may be unlawful. If you have received this communication
in error, please immediately notify the sender by reply e-mail and
destroy
all copies of the communication and any attachments.

On Wed, 9 Aug 2006, Logan C. wrote:

But spaceship is already defined for array (and it does the right thing
™). If Array is going to make spaceship available, why not include
Comparable?

yeah - exactly. by implimenting <=> it is comparable in that one
can
indeed to

a = 0,1,2
b = 2,3,4

lt = (a <=> b) == -1
eq = (a <=> b) == 0
gt = (a <=> b) == 1

so it’s just anoying that i can’t acutally say

lt = a < b

2 cts.

-a