> On 21 Jul 2016, at 09:51, Robert Widmann via swift-evolution
> <[email protected]> wrote:
>
>> On Jul 20, 2016, at 9:37 PM, Félix Cloutier via swift-evolution
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>> The problem is that by specifying "import Foo using (Baz)", I get nothing
>> else from Foo. If I only want to exclude one conflicting name, I would have:
>>
>>> import Foo
>>> import Bar hiding (Baz)
>>
>> In case of a conflict, my "internal monologue" is more like "take Baz from
>> Foo" than "don't take Baz from Bar".
>>
>
> How else would you resolve an ambiguity than by selecting the appropriate
> declaration and hiding the others? Swift’s semantic analysis cannot read
> your mind, and neither can your (or mine) proposal for renaming syntax - in
> that you still have to import both modules either way. You may as well be
> explicit about which name you’re actually using and which ones you’re
> actually hiding, eh?
Simple! You don't need to hide the others if we enforce a rule that explicitly
mentioning one in the current file imports that name as a fileprivate
identifier which shadows the ones not explicitly mentioned:
import A using (X)
import B // also exports X which gets shadowed by A.X
import C // also exports X which gets shadowed by A.X
assert(X.self == A.X.self)
assert(X.self != B.X.self)
assert(X.self != C.X.self)
import D using (X)
// error: invalid redeclaration of 'X'
// note: previously declared here: 'import A using (X)'
typealias X = Int
// error: invalid redeclaration of 'X'
// note: previously declared here: 'import A using (X)'
That would go nicely hand-in-hand with the idea that explicitly importing a
module with a qualified name brings in the name of that module to the current
file's scope:
import A // ok, unqualified import keeps A as a second-class identifier
import B as B // ok, qualified import makes B a first-class identifier in
file scope
typealias A = Int // ok, shadows the module name A
typealias B = Int
// error: invalid redeclaration of 'Bar'
// note: previously declared here: 'import Bar as Bar'
Couldn't we find a synthesis with both the explicit qualification of modules
and the explicit selection of imported names? I would strongly support that.
— Pyry
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution