> 2016/07/16 21:37、Jean-Daniel Dupas <mail...@xenonium.com> のメール:
> 
>> Le 16 juil. 2016 à 00:31, Andre Elder via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> a écrit :
>> 
>> 2016/07/15 16:37、Riley Testut via swift-evolution <swift-evolution@swift.org 
>> <mailto:swift-evolution@swift.org>> のメッセージ:
>> 
>>> FWIW, I'm still against this proposal, but since it will be accepted 
>>> regardless, here are my thoughts:
>>> 
>>> • Open keyword is significantly better. 
>>> • Members should be *open* by default, and final should be opt-in. If 
>>> you're opening up a class for subclassing, my gut says you should allow the 
>>> client to do as they wish.
>> If you have a class that was not open yet, just making it open wouldn't 
>> expose any members: it would then just be subclassable.
>> 
>> If the act of making the class open doesn't implicitly make overriding 
>> possible, well all you can do then is add methods, and that can be done with 
>> extensions anyways, so it's not as useful and makes the public open class {} 
>> pattern just by itself not so useful imho... 😬
>> 
>> Also, the keyword 'open' itself may imply 'hey I'm open, please do what you 
>> want with my public members', whereas 'subclassable' is more specific in 
>> intention...  (but that's just me, so n=1 and all that)
>> 
>> TLDR; +1 to the above: simpler is better and defaulting to overridable for 
>> public members on an open class is simpler... invariants can be protected by 
>> the 'final' keyword.
>> 
>> If we were to default to non-overridable, a more consistent 'open' on the 
>> method is preferred over overridable for me... open class, open method... 
>> much better imho...
> 
> Do we really need an open keyword ?
> 
> As already said, if open does nothing more than allowing the class to be 
> subclassed, why not simply make the class subclassable if it contains at 
> least one overridable member ?
Thats a good point actually… but looks like Review #2 has already started… and 
'open' is available for both class and method there… I suppose its the whole 
"default to safe", just in case someone made one method 'open' they may not 
have intended to actually make the whole class open… (also see below)

> In case we require an open keyword, what would happen if someone mark a 
> member overridable, but does not make the class open ? Will the compiler emit 
> an error, or make the class implicitly « open » ? 
In proposal #2 looks like it would generate an error, but Xiaodi Wu has said 
that it should be allowed and not generate an error per SE-0025 
<https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md>.
 
<https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md#complications-with-private-types>Take
 a look at 
<https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md#complications-with-private-types>:
 "The compiler should not warn when a broader level of access control is used 
within a type with more restrictive access, such as internal within a private 
type."

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

Reply via email to