On Tue, May 31, 2016 at 2:32 PM, Christopher Kornher via swift-evolution < [email protected]> wrote:
> > > On May 31, 2016, at 1:00 PM, Erica Sadun via swift-evolution < > [email protected]> wrote: > > > > > >> On May 31, 2016, at 12:52 PM, Xiaodi Wu <[email protected]> wrote: > >> These lines of reasoning are what have compelled me to conclude that > `where` might not be salvageable. > > > > To which, I'd add: `where` suggests there's a subordinate and semantic > relationship between the primary condition and the clause. There's no way > as far as I know this to enforce it in the grammar and the proposal allows > both clauses to be stated even without the connecting word. > > OK. I am naive enough to try to informally define a rule that would make > “where” required and cover all (?) cases in the proposal: > > ‘where’ is required after an if-let for any clause involving a variable or > constant defined in that 'if let. All boolean expressions after the ‘where’ > must reference at least one of constants defined by the ‘if let' > > Allowed: > > let a = a, b=b where b > 10 && a > 5 && b> a > > > Not allowed: > … > let a = a > let b = b where b > 10 && a > 5 > Why would this not be allowed by your rule? You're making use of `b` in your where clause. As I demonstrated above, essentially any assertion can be rewritten to work around your rule. In general: ``` let y = y where x < z ``` can be trivially (and awfully) rewritten as ``` let y = y where (y.dynamicType == y.dynamicType && x < z) ``` > b > a > ... > > … > let a = a > let b = b where b > 10 > a > 5 > b > a > … > > This requires the use of commas because all inter-related ‘if let’ > constants must be associated with a single ‘where' > > This makes the use of ‘&&’ more natural, since everything to the right of > “where” is a boolean expression > > The formal grammar is left as an exercise :) > > The downside: > > I would not have to answer all the ‘Why won’t this compile?’ > questions on stack overflow. Of course, I would not want to do that for the > current syntax, either. > > > > You could make a vague argument, I suppose, for renaming `where` to > `when` but all in all, even killing `where` we benefit with better > expressive capabilities and a simpler grammar. > > > > -- E > > > > _______________________________________________ > > 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 >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
