> On Jan 11, 2017, at 01:11, Freak Show <[email protected]> wrote:
> 
> 
>> On Jan 7, 2017, at 23:37, Derrick Ho <[email protected]> wrote:
>> 
>> I think pattern matching is the most compelling reason to keep tuples.  
>> 
>> If they were gone, how would we replace the following?
>> 
>> switch (a, b) {
>> case (value1, value2):
>> case (value3, value4):
>> }
> 
> I meant to mention this:  Smalltalk - Objective C's mother language - has no 
> switch statement (or 'if' or loops either).  The language is incredibly 
> malleable because it only does one thing - send messages to objects and all 
> the language constructs are in the library.  It would take very little time 
> to add one.  Off and on someone does it as an exercise but it never sticks.
> 
> Instead, you just use a dictionary of closures.  An Objective C equivalent 
> might be:
> 
> NSDictionary* switch = @{
>       @[@0,@1]: ^{ NSLog(@"zero one"); },     
>       @[@1,@1]: ^{ NSLog(@"one one"); }
> };
> 
> NSArray* pair = @[@3, @5];
> 
> (switch at:pair ifAbsent:^{})();  //where at:ifAbsent: is added in the 
> Smalltalk style as an extension.
> 
> The Smalltalk equivalent (much less ugly because of the lack of @'s) is
> 
>  switch := {
>   #(0 1)   -> [ Transcript nextPutAll: 'zero one' ] .
>   #(1 1)   -> [ Transcript nextPutAll: 'one one' ] . 
>   #(1 2) -> [ Transcript nextPutAll: 'one two' ] .
> } asDictionary.
> 
> (switch at: pair ifAbsent:[ [] ]) value.
> 
> So its not like this is some kind of key feature.  Switch's vs dictionaries 
> of closures - pretty much the same thing as pattern matching goes.  The only 
> thing you have to do is put an object at key that identifies itself as equal 
> to the pattern you will throw at it.

I suspect that's a fair bit slower than a switch  statement. I'm not in front 
of my computer, so I can't prove it, though.

- Dave Sweeris 
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to