That would be a weak -1 for me too, but only because I don't like the where syntax on control structures.
Félix > Le 20 déc. 2015 à 01:31:28, Jacob Bandes-Storch via swift-evolution > <[email protected]> a écrit : > > A weak -1. > > I'm not certain that my argument holds up very well; I'm just pointing out > how I see this as consistent with the rest of the language. My point is that > "where" is a keyword which adds an extra condition onto a braced block; it > doesn't play a role in producing values. > > "for x in y where x > 2" means: > > var g = y.generate() > while let x = g.next() { > if x > 2 { // added by "where" clause > // contents of for-in loop here > } > } > > Similarly, "if let x = y where y > 2" means roughly: > > if y != nil { > let x = y! > if x > 2 { // added by "where" clause > // contents of if-statement here > } > } > > The purpose of "where" is merely to add an extra "if" without requiring > another level of nesting. A plain for-in loop doesn't produce a new array of > values, so using "in" and/or "where" by themselves to produce a new array > isn't possible. > > Jacob Bandes-Storch > > On Sat, Dec 19, 2015 at 10:10 PM, Charles Constant <[email protected] > <mailto:[email protected]>> wrote: > Hi Jacob, > > I take it that's a -1 ? > > I don't quite understand your example, because y in a "for" loop is an Array. > So if I modify your example (I'll rename "y" to "numbers")... > > for x in numbers where x > 2 { } > > ...my intuition immediately barks "it's a filter!" > > let valid_numbers = x in numbers where x > 2 > > I realize it's good to have a closure-based solution for map/filter/reduce, > so fair enough that we let the filter method exist. Maybe if I understood > Swift better (is this related to sequences?) this would all make sense... but > with what grasp of Swift I do have, it makes the language feel baroque to > have this "where" clause that looks like it ought to instantiate an array, > but can't. > > > > > > > > > > On Sat, Dec 19, 2015 at 9:45 PM, Jacob Bandes-Storch <[email protected] > <mailto:[email protected]>> wrote: > It doesn't bother me, because I read it as an additional constraint on the > `for` loop rather than an operation being done on the enumerated sequence. > That is, > > for x in y where x > 2 { } > > is fairly consistent with > > if let x = y where x > 2 { } > > And you wouldn't expect to be able to do "let x = y where x > 2". > > Jacob Bandes-Storch > > On Sat, Dec 19, 2015 at 8:22 PM, Charles Constant via swift-evolution > <[email protected] <mailto:[email protected]>> wrote: > Thanks Charles , > > I know it's possible to do the same thing with filter. The syntax I drew > attention to would be an alternate way. > > My only rationale is that, if it works in one place, it ought to work > everywhere. The redundancy bothers me too, but since the concept exists, we > may as well allow it everywhere. Otherwise, it's still redundant in a "for" > loop (maybe performance is better, but that could be optimized?), but also > inconsistent because it seems intuitively like it ought to create a subset > whereas in reality it is illegal. > > Does it bother anyone else, or am I nitpicking? > > On Sat, Dec 19, 2015 at 7:52 PM, Charles Srstka <[email protected] > <mailto:[email protected]>> wrote: >> On Dec 19, 2015, at 9:43 PM, Charles Constant via swift-evolution >> <[email protected] <mailto:[email protected]>> wrote: >> >> I noticed several weeks ago that the following is illegal: >> >> let new_arr = el in arr where el.is <http://el.is/>_foo // illegal >> >> I assumed it would work because it's consistent with the filtering that >> exists in a "for" loop, i.e.: >> >> for el in arr where el.is <http://el.is/>_foo // legal >> >> Is this "new proposal" material? I thought I would check in case it's >> already on the roadmap, or inherently wrong. > > I believe what you want is already possible via the “filter” method. > > Charles > > > > > _______________________________________________ > swift-evolution mailing list > [email protected] <mailto:[email protected]> > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution> > > > > > _______________________________________________ > swift-evolution mailing list > [email protected] <mailto:[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
