> On Apr 2, 2017, at 11:17 PM, Daniel Duan via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> On Apr 2, 2017, at 11:10 PM, Xiaodi Wu <xiaodi...@gmail.com 
>> <mailto:xiaodi...@gmail.com>> wrote:
>> 
>> This rule cannot hold. You cannot have the shorthand syntax you propose, 
>> disallow mixing of shorthand syntax and the longer form, *and* allow `_` to 
>> substitute for any pattern without a label.
>> 
>> ```
>> enum E {
>>   case foo(a: Int, b: Int, c: Int)
>>   case foo(a: String, c: String, e: String)
>> }
>> 
>> let e = /* instance of E */
>> 
>> switch e {
>> case foo(let a, _, _):
>>   // what type is `a` here?
>>   break
>> default:
>>   fatalError()
>> }
>> ```

> 

> That seems like straight up ambiguity with or without restriction on the 
> label though? This kind of usability problem should and is discouraged by the 
> proposed solution.

Let's make it a little more reasonable:

        enum Color {
                case color(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: 
CGFloat)
                case color(hue: CGFloat, saturation: CGFloat, value: CGFloat, 
alpha: CGFloat)
        }

        let c: Color = …
        
        switch c {
        case .color(_, _, _, let alpha):
                …
        }

Interestingly, in this example it would probably be appropriate to match both 
cases. I wonder if that's true in the general case.

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to