On 02.08.2015 19:02, Peter Uhnák [via Smalltalk] wrote:Technically, you can:
> (a b c) = (b a c) if a = b
>
> (a b c) < (b a c) if a < b
> The semantics are well defined.
>
>
> Since you mentioned JavaScript, you should know that you can't compare
> arrays with ==, because it does object comparison.
>
> No. Sorted collection maintains order of its elements, and I'm talking
> about order on [the set of] sequencable collections
>
> This will make sense only if the objects have overriden their #=.
> Which also means that it is not very useful to use #<, because you can't
> define order without overriding #=.
(a < b) not and: [ (b < a) not ] "a and b are equal"
But of course it's reasonable to implement #= and #hash along with #< -
that's what TComparable requires.
> Compare it to sorting a collection, where you can either do #sorted,
> which will do "a <= b" by default, but you can still do #sorted: and
> specify the sort order, dtto with PluggableDictionary etc.
> So if anything, it would make more sense to be able to block-based
> testing (without relying on #<), because more often then not you will
> have your values wrapped in some (bigger) objects.
Something like #compare:using: where second argument is a binary block?
Might be a solution, although not as elegant.
Question is what are return values of the method and what is expected to
be returned from the block?
String>>#compare: returns integer from 1 to 3;
SequencableCollection>>#findBinary: expects either 0, negative or
positive integer; #sorted: expects boolean; #max:, #min:, etc. expect
object to be compared.
Free forum by Nabble | Edit this page |