On Tue, May 31, 2016 at 2:51 PM, Christopher Kornher via swift-evolution < [email protected]> wrote:
> > On May 31, 2016, at 1:47 PM, Xiaodi Wu <[email protected]> wrote: > > > > On Tue, May 31, 2016 at 2:45 PM, Christopher Kornher via swift-evolution < > [email protected]> wrote: > >> >>> 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: >> >> >> It is not allowed because ‘a’ is defined in the line above. It must be >> defined in the ‘if let’ associated with the where in which it is mentioned. >> > > That's a much more restrictive where clause than you proposed earlier. > You'd not be able to write: > > ``` > let b = b where b > anyOtherVariable > ``` > > > The definition is not a formal one, but that was the intent. > > ``` > let b = b where b > anyOtherVariable > ``` > > is legal as long as `anyOtherVariable` is not defined within the entire > condition clause > You can propose that rule, but it doesn't solve the issue. If, today, I've got ``` let x = 1 let y: Int? = 2 let z = 3 if let y = y where x < z { // do stuff } ``` your rule simply forces ``` if let y = y where y == y && x < z { // do stuff } ``` The point is, the semantic relationship between what comes before and after `where` exists in the mind of the human reader only.
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
