[swift-evolution] Proposal: pattern match based on associated value(s) only

Amir Michail amichail at gmail.com
Fri Feb 26 06:23:38 CST 2016


> On Feb 26, 2016, at 12:25 AM, Andrew Bennett <cacoyi at gmail.com> wrote:
> 
> Hi Amir,
> 
> I put forward a proposal a short while ago that may allow you to achieve similar to what you want, it is here:
> 
> Declare variables in 'case' labels with multiple patterns
> https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007431.html <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007431.html>
> 
> https://github.com/apple/swift-evolution/pull/119 <https://github.com/apple/swift-evolution/pull/119>
> 
> It would allow you to express your logic like this:
> 
>   switch vehicle {
>   case .Car(let color), .Motorcycle(let color), .Helicopter(let color):
>       switch color {
>       case .Red:   ...
>       case .Green: ...
>       case .Blue:  ...
>       }
>   }
> 
> That proposal seemed to be well received with no votes against, and after a few tweaks seemed to have support from the Swift team.
> 
> What do you think about that approach? It's not quite as concise as what you proposed but it can be generalised more easily, and handles pattern matching of cases where `color` may not be the only associated value.
> 

I like both proposals, yours and mine. They both have their uses.

> 
> On Wed, Feb 24, 2016 at 1:13 AM, Amir Michail via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>> On Feb 23, 2016, at 7:27 AM, Taras Zakharko <taras.zakharko at uzh.ch <mailto:taras.zakharko at uzh.ch>> wrote:
>> 
>> I think that other designs (e.g. using classes/structs/protocols) offer a much better solution for this particular problem
>> 
> 
> That might be more work than just listing all the cases...
> 
>>> On 23 Feb 2016, at 13:17, Amir Michail via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>>> 
>>>> On Feb 22, 2016, at 10:11 PM, Brent Royal-Gordon <brent at architechies.com <mailto:brent at architechies.com>> wrote:
>>>> 
>>>>> For example:
>>>>> 
>>>>> enum Color {
>>>>> 	...
>>>>> }
>>>>> 
>>>>> enum Vehicle {
>>>>> 	case Car(Color)
>>>>> 	case Motorcycle(Color)
>>>>> 	...
>>>>> }
>>>>> 
>>>>> switch vehicle {
>>>>> 	case _(.Red): … // pattern match based on associated value only
>>>>> }
>>>> 
>>>> As usual, Amir: 
>>>> 
>>>> 1. Why do you want this feature?
>>> 
>>> In this example, if there are many kinds of vehicles, it would be annoying to have to write a case for each one to match associated value .Red.
>>> 
>>>> 
>>>> 2. What's actually wrong with the status quo?
>>>> 
>>> 
>>> What would that be for this example? Many cases?
>>> 
>>>> 3. Can you talk about a non-toy example you've encountered where it would have made your code better?
>>>> 
>>>> 4. Can you talk about the proposed design in a little more detail? Are there weird edge cases, and how would you handle them? (In the case of this feature, here's one I see: Suppose you have two different associated value types but they both have a .Red case. What happens then?)
>>>> 
>>>> A half-dozen-word subject line and a code example simply aren't enough to evaluate a proposal. Without knowing exactly what you're proposing and why you think it's a good idea, we can't really evaluate it properly.
>>>> 
>>>> -- 
>>>> Brent Royal-Gordon
>>>> Architechies
>>>> 
>>> 
>>> _______________________________________________
>>> 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>
> 
> 
> _______________________________________________
> 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/20160226/0e8b0051/attachment.html>


More information about the swift-evolution mailing list