Hi --

On Sun, 7 Oct 2007, Trans wrote:

>
>
> On Oct 7, 2:21 am, Eric Hodel <drbr... / segment7.net> wrote:
>> I haven't seen this technique in the wild before.
>>
>> If you have custom sorting using the spaceship:
>>
>> class Something
>>    def <=>(other)
>>      [@name, @version] <=> [other.name, other.version]
>>    end
>> end
>>
>> You can't easily use the more-efficient #sort_by because you'll need
>> to know how to sort Somethings, which involves duplication:
>>
>> somethings.sort_by { |s| [s.name, s.version] }
>>
>> Instead you can add a method that returns the thing to sort by:
>>
>> class Something
>>    def sort_obj
>>      [@name, @version]
>>    end
>>
>>    def <=>(other)
>>      sort_obj <=> other.sort_obj
>>    end
>> end
>>
>> So now using #sort_by is easy:
>>
>> somethings.sort_by { |s| s.sort_obj }
>>
>> I don't know if the name #sort_obj is appropriate, but I'm not coming
>> up with something better.
>>
>> See also:
>>
>> http://blog.segment7.net/articles/2007/10/07/sort_by-and-sort_obj
>
> Nice. In fact, it seems this could dethrone <=> as the primary method
> Sortable depends on.

I think Eric intends it to return a kind of sort key, not to actually
specify the sorting algorithm.

> Perhaps a better name is #indice or #sort_index, or something like
> that.

I'm afraid "indice" isn't a word :-) The singular of indices is index.


David

-- 
Upcoming training from Ruby Power and Light, LLC:
   * Intro to Ruby on Rails, Edison, NJ, October 23-26
   * Advancing with Rails, Edison, NJ, November 6-9
Both taught by David A. Black.
See http://www.rubypal.com for more info!