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

···

--
to foster inner awareness, introspection, and reasoning is more efficient than
meditation and prayer.
- h.h. the 14th dali lama

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

···

ara.t.howard@noaa.gov wrote:

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

??

Indeed I have found it useful to

  class Tuple < Array
    include Comparable
  end

But I also make it immutable.

T.

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
??

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.

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

···

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

ara.t.howard@noaa.gov wrote:

Hal

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

···

On Wed, 9 Aug 2006, Hal Fulton 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.

--
to foster inner awareness, introspection, and reasoning is more efficient than
meditation and prayer.
- h.h. the 14th dali lama

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

James Edward Gray II

···

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

But spaceship is already defined for array (and it does the right thing (tm)). 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

···

On Wed, 9 Aug 2006, Logan Capaldo wrote:

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

--
to foster inner awareness, introspection, and reasoning is more efficient than
meditation and prayer.
- h.h. the 14th dali lama

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.

···

ara.t.howard@noaa.gov wrote:

On Wed, 9 Aug 2006, Hal Fulton 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