[swift-evolution] Reconsidering SE-0003 Removing var from Function Parameters and Pattern Matching

Dave Abrahams dabrahams at apple.com
Fri Jan 29 10:54:47 CST 2016


on Thu Jan 28 2016, Thorsten Seitz <swift-evolution at swift.org> wrote:

> This is called flow typing in Ceylon and they are using "exists" for
> that case but testing for conformance with "is" works just the same
> way there. The latter is of importance because the common use of union
> types in Ceylon.
>
> if exists foo {
>         // foo is non-optional here
> }
>
> if foo is String {
>         // foo is of type String here
> }

FWIW, some of us are concerned that if the types of names change
without being announced by a let or var binding, it will be confusing.
That's one reason we haven't gone this way in the past.

> -Thorsten
>
>> Am 28.01.2016 um 19:08 schrieb Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org>:
>> 
>>    if bind foo {
>>        // foo is non-optional in here
>>    }
>> 
>>    somethingAsync { [weak self] in
>>        guard bind self else { return }
>>        // ...
>>    }
>> 
>> Elegant when you want to rebind the same name!
>> 
>> Jacob
>> 
>>> On Thu, Jan 28, 2016 at 10:05 AM, Erica Sadun via swift-evolution
>>> <swift-evolution at swift.org> wrote:
>>> Do you realize how much confusion it would save if Swift just went with
>>> 
>>> if bind foo = bar {...}
>>> 
>>> with let semantics?
>>> 
>>> -- Erica
>>> 
>>> > On Jan 28, 2016, at 11:03 AM, Joe Groff via swift-evolution
>>> > <swift-evolution at swift.org> wrote:
>>> >
>>> >
>>> >> On Jan 28, 2016, at 12:43 AM, Brent Royal-Gordon <brent at architechies.com> wrote:
>>> >>
>>> >>> We have a lot of evidence that 'if var' confuses peopleā€”a lot
>>> >>> of users think that 'if var' and 'var' bindings in case
>>> >>> patterns will write back to the original value when this isn't
>>> >>> the case.
>>> >>
>>> >> Can we address this with a diagnostic?
>>> >>
>>> >>      var bar: Int? = 1
>>> >>      if var foo = bar {
>>> >>              foo += 1        // Warning: Value is never used after modification (foo is a copy, not an alias)
>>> >>      }
>>> >>      print(bar)
>>> >
>>> > Good idea.
>>> >
>>> > -Joe
>>> > _______________________________________________
>>> > swift-evolution mailing list
>>> > swift-evolution at swift.org
>>> > https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-- 
-Dave



More information about the swift-evolution mailing list