[swift-evolution] Allowing non-binding pattern matching as a Bool expression?
Chris Lattner
clattner at apple.com
Thu Dec 10 23:32:10 CST 2015
> On Dec 9, 2015, at 8:49 AM, thorsten at portableinnovations.de wrote:
>
> I would prefer if no "magic" methods would be generated automatically, but only when marked with @derivestandardmethods (fill in better name here).
Yes, making it opt-in could make sense.
> What about enums with more than one associated value?
It would return an optional tuple of the associated values, the tuple corresponds to the case parameter list.
-Chris
>
> -Thorsten
>
> Am 09.12.2015 um 07:29 schrieb Alex Lew via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>>:
>
>> Thanks, Chris, for all the time you're putting into responding to these proposals (and the kindness with which you're responding!). I really like that solution.
>>
>> Brainstorming some names for the auto-generated functions:
>>
>> 1. If a case has no associated values, isX() -> Bool is generated, where X is the case name.
>> If a case has an associated value of type T, asX() -> T? is generated, where X is the case name.
>> This mirrors is/as? operators, which return Bool / Optional respectively.
>> 2. projectX() -> Bool / projectX() -> T?
>> 3. isX() -> Bool / xValue() -> T?
>>
>> Another option (probably the wrong option, but it's worth putting out there) is that instead of returning Bool in the no-associated-value case, we return ()?. This would make me feel better about using the same naming convention (asX(), projectX(), xValue(), etc.) for each case, and would allow for != nil checks on all cases. But it would probably be a little confusing for newcomers to the language.
>>
>> One (potentially misguided) question. I noticed in proposal 0002 (on removing function currying) that there are "plans to move away from the arguments-are-a-single-tuple model" in the near future. Would this also affect associated values of enums? That is, might
>>
>> case Dog(name: String, age: Int, breed: String)
>>
>> one day not have the semantics of a single associated value of type (name: String, age: Int, breed: String)? Or is the de-ML-ification planned only for function arguments?
>>
>> -Alex
>>
>> On Wed, Dec 9, 2015 at 12:45 AM, Chris Lattner <clattner at apple.com <mailto:clattner at apple.com>> wrote:
>>
>> > On Dec 7, 2015, at 8:05 PM, Alex Lew via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> >
>> > Hi all,
>> >
>> > Curious to hear thoughts on allowing non-binding pattern matches to be used as boolean values outside of an if, guard, for...in, while, switch, etc. Something like:
>> >
>> > enum List<T> {
>> > case Empty
>> > indirect case Link(T, List<T>)
>> >
>> > func isEmpty() -> Bool {
>> > return case .Empty = self
>> > }
>> > }
>>
>> I agree with you that this is a problem that we should solve, but I think it could be solved in a different way. Imagine if:
>>
>> enum Foo {
>> case X(a : Float), Y, Z(a : Int)
>> }
>>
>> automatically synthesized these members (the exact names are just a strawman proposal, not serious :-)
>>
>> extension Foo {
>> func isX() -> Float? {…}
>> func isY() -> Bool {…}
>> func isZ() -> Int? {…}
>> }
>>
>> This would tie into all of the mechanics we have for dealing with optionals, e.g. if/let and ??
>>
>> -Chris
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151210/f8c36536/attachment.html>
More information about the swift-evolution
mailing list