> On Jan 24, 2017, at 12:36 PM, Pyry Jahkola via swift-evolution 
> <[email protected]> wrote:
> 
> 
> Freak Show wrote:
> 
>> Am I the only one who finds this incredibly ugly and hard to read?
>> 
>> This is more or less solved by inject:into: idiom.  There is no reason for 
>> inout for this particular problem.
> 
> Yeah, the original signature seems more useful. If you go all `inout` like 
> Gwendal suggested, you might as well just iterate over the sequence with `for 
> x in xs`, updating the state as you go.
> 
> But your comment brought another idea to mind: if `mutating:` is considered a 
> bad name for a non-`inout` argument, how about `reduce(into:combine:)`, 
> similar to what Karl suggested earlier in this thread?
> 
> I think it reads very well at the call site, does not suggest `inout`ness of 
> the argument too much (of course there's no `&` at the call site either), and 
> it's still easily found with auto-completion:
> 
>     let counts = words.reduce(into: [:]) {
>       $0[$1] = ($0[$1] ?? 0) + 1
>     }

+1.  This is concise and I think it captures the essence of what is happening 
pretty well!

The third variation where the seed argument actually *is* `inout` might also be 
interesting in some cases where you *already* have a `var` that you want to 
accumulate into.  I believe I have done this in the past in my own code but 
don’t have an example handy.

> 
> — Pyry
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> 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