The y == y I presume is to get around this requirement by reintroducing a 
variable in the previous part of the conditional to be able to refer to other 
variables. 

x > z isn't allowed, but y == y && x > z would be because it's using y. 

I'm not convinced anyone would do this when they could just && x > z anyways 

Brandon 

> On May 31, 2016, at 4:06 PM, Christopher Kornher via swift-evolution 
> <[email protected]> wrote:
> 
> I should have left the entire context in my reply.
> 
> 
>> On May 31, 2016, at 1:59 PM, Xiaodi Wu <[email protected]> wrote:
>> 
>>> 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.
> 
> I meant to add that all boolean expressions after the where must use one of 
> the constants defined in the associated `if let` so the `&& x < z` would not 
> be allowed.
> 
> I don’t understand the 'y == y’ in your example
> 
> 
> _______________________________________________
> 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