[swift-evolution] Analysis of existing scopes

Joanna Carter joanna at carterconsulting.org.uk
Sat Feb 25 04:35:24 CST 2017

> Le 25 févr. 2017 à 02:55, Xiaodi Wu <xiaodi.wu at gmail.com> a écrit :
> It is a useful generalization of an absolutely obligatory feature for new `private`. Consider the following:
> ```
> private class Foo {
>   private class Bar {
>     /* blank */ class Baz { }
>   }
> }
> ```
> What access modifier can be used in place of `blank` to make `Foo.Bar.Baz` have the same visibility as `Foo.Bar`? Note that `private` inside the type is more restrictive than `private` in the declaration of the type; the precise visibility of `Foo.Bar` is not expressible inside `Foo.Bar` itself. To allow `Foo.Bar.Baz` to be visible everywhere that `Foo.Bar` is visible, we must allow `blank` to be replaced by a modifier other than `private`.

Aaaarrrgghhh!!! Of course!

You'd have thought, having created massive frameworks in C#, which allows the same thing, and which I used extensively, I would have remembered that.

It just goes to show that we can often be so close to a subject that we "can't see the wood for the trees" :-)

Joanna Carter
Carter Consulting

More information about the swift-evolution mailing list