> 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
