I don’t understand that argument.  Obviously the function would be documented 
and there would be examples showing how to use it.  Why would it confuse people?

I think you’d need much stronger reasons to justify adding an unbounded set of 
overloads (is every algorithm that takes a comparison closure going to get one 
of these?) when we can handle the problem economically with a single function.

-Dave

> On Dec 31, 2015, at 12:04 AM, Susan Cheng <[email protected]> wrote:
> 
> It confuses people if provide a global function byComparing in stdlib which's 
> doing nothing alone.
> 
> Dave Abrahams <[email protected] <mailto:[email protected]>> 於 
> 2015年12月31日星期四 寫道:
> Why add all those algorithms when you can write this
> 
> func byComparing<T, U: Comparable>(getComparisonKey: (T)->U) -> (T, T) -> 
> Bool {
>   return { getComparisonKey($0) < getComparisonKey($1) }
> }
> 
> peoples.sort(byComparing { $0.name <http://0.name/> })
> 
> ?
> 
> -Dave
> 
>> On Dec 30, 2015, at 10:38 PM, Susan Cheng via swift-evolution 
>> <[email protected] 
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>> 
>> 
>> Consider the follows:
>> 
>> struct Person {
>>     
>>     var name: String
>>     var age: Int
>> }
>> 
>> let peoples = [Person(name: "Hawk", age: 24), Person(name: "Andrew", age: 
>> 23)]
>> 
>> let youngest = peoples.minElement { $0.age < $1.age }
>> 
>> print(youngest?.name)
>> 
>> it's silly that we always have to write the code like { $0.some < $1.some } 
>> or { some($0) < some($1) }
>> 
>> so, we should add those methods to stdlib:
>> 
>> extension SequenceType {
>>     /// Returns the minimum element in `self` or `nil` if the sequence is 
>> empty.
>>     ///
>>     /// - Complexity: O(`elements.count`).
>>     ///
>>     @warn_unused_result
>>     public func minElement<R : Comparable>(@noescape by: (Generator.Element) 
>> throws -> R) rethrows -> Generator.Element? {
>>         return try self.minElement { try by($0) < by($1) }
>>     }
>>     /// Returns the maximum element in `self` or `nil` if the sequence is 
>> empty.
>>     ///
>>     /// - Complexity: O(`elements.count`).
>>     ///
>>     @warn_unused_result
>>     public func maxElement<R : Comparable>(@noescape by: (Generator.Element) 
>> throws -> R) rethrows -> Generator.Element? {
>>         return try self.maxElement { try by($0) < by($1) }
>>     }
>> }
>> 
>> public extension MutableCollectionType {
>>     
>>     /// Return an `Array` containing the sorted elements of `source`.
>>     /// according to `by`.
>>     ///
>>     /// The sorting algorithm is not stable (can change the relative order of
>>     /// elements that compare equal).
>>     @warn_unused_result(mutable_variant="sortInPlace")
>>     func sort<R : Comparable>(@noescape by: (Generator.Element) -> R) -> 
>> [Generator.Element] {
>>         return self.sort { by($0) < by($1) }
>>     }
>> }
>> 
>> public extension MutableCollectionType where Self.Index : 
>> RandomAccessIndexType {
>>     
>>     /// Sort `self` in-place according to `by`.
>>     ///
>>     /// The sorting algorithm is not stable (can change the relative order of
>>     /// elements that compare equal).
>>     mutating func sortInPlace<R : Comparable>(@noescape by: 
>> (Generator.Element) -> R) {
>>         self.sortInPlace { by($0) < by($1) }
>>     }
>> }
>> 
>>  _______________________________________________
>> swift-evolution mailing list
>> [email protected] 
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to