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

Reply via email to