> On May 18, 2016, at 2:55 PM, Joe Groff <[email protected]> wrote:
> 
>> 
>> On May 18, 2016, at 12:54 PM, Matthew Johnson <[email protected]> wrote:
>> 
>> 
>>> On May 16, 2016, at 4:06 PM, Joe Groff via swift-evolution 
>>> <[email protected]> wrote:
>>> 
>>> Currently, we parse a type after 'as[?!]' and 'is'. This is mostly what 
>>> you'd expect, but does lead to problems when an 'as' expression appears as 
>>> part of a comparison:
>>> 
>>>     20 as Int64 < y as Int64 // error, '>' expected to close generic 
>>> parameter list Int64<y>
>>> 
>>> Looking to the future, many people have also expressed interest in the 
>>> ability to do dynamic type checks against metatype values, not only static 
>>> types, as in:
>>> 
>>>     class Base {}
>>>     class DerivedA {}
>>>     class DerivedB {}
>>> 
>>>     var x: Base.Type = DerivedA
>>> 
>>>     DerivedA() as? x // succeeds
>>>     DerivedB() as? x // fails
>> 
>> The dynamic check itself makes sense but it isn’t clear what type these 
>> expressions should return?  It can’t be `DerivedA?` like it would in the 
>> equivalent static expression as the type is not known statically:
>> 
>> DerivedA() as? DerivedA // succeeds with value Optional<DerivedA>.Some
>> DerivedB() as? DerivedA // fails with value Optional<DerivedA>.None
> 
> Right, the static type of a cast like this would still have to be the upper 
> bound type of the metatype value. (Unless we introduce some sort of 
> path-dependent types to allow `x.Self` to be a type.)

So `Base?` in this case?  That makes sense.  Thanks for clarifying.

> 
> -Joe

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

Reply via email to