> On Jun 7, 2016, at 11:36 AM, Paul Cantrell via swift-evolution > <[email protected]> wrote: > >> >> On Jun 7, 2016, at 10:47 AM, L. Mihalkovic via swift-evolution >> <[email protected] <mailto:[email protected]>> wrote: >> >> On Jun 7, 2016, at 4:53 PM, Tony Allevato <[email protected] >> <mailto:[email protected]>> wrote: >> >>> I like the "from" keyword the best, but I'll take my own stab at a >>> modification: >>> >>> import ModuleA >>> import ModuleB >>> >>> "hello world".(capitalized from ModuleA)() >>> "hello world".(capitalized from ModuleB)() >>> "hello world".(someProperty from ModuleA) >>> "hello world".(someProperty from ModuleB) >> >> Hmmm... looks like an oxymoron in its own right... I was under the >> impression so far that the point of extensions was that they are not tied to >> a source. This brings us back full circle to the very definition of >> extensions... However you slice it, swift is lacking some scoping bellow >> modules, and/or arround some of the language features. > > IIRC, a member of the core team (Joe Groff, maybe?) indicated several months > ago on the list that methods are internally namespaced to their module. Alas, > I can’t find that message. It was a long time ago.
Ah, here it is: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/000928.html Joe Groff wrote: “It's helpful to think of method names as being namespaced in Swift, by both their enclosing module and type. If two modules independently extend a protocol with a method of the same name, you still semantically have two distinct methods that dispatch independently. The extension would have to be factored into a common module both modules see for them to interact.” IOW, yes, Swift internally does something very much like "hello world”.ModuleA::capitalized(). > You can see this in the fact that two different files can see two different > extension methods: > > A.swift > > import ModuleA > … > "hello world".capitalized() > > B.swift > > import ModuleB > … > "hello world".capitalized() > > …even if they end up compiled into the same binary. And that makes sense: > A.swift only expected to see ModuleA’s extension, and was presumably coded > around that expectation. That ModuleB happened to end up mixed into the same > binary shouldn’t change the behavior of A.swift > > If my understand is correct, then my "hello world”.ModuleA::capitalized() and > your "hello world".(capitalized from ModuleA)() are both just syntax to > expose something that Swift already tracks internally. > > Cheers, P > > _______________________________________________ > swift-evolution mailing list > [email protected] <mailto:[email protected]> > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
