gpt4 book ai didi

swift - Swift 如何消除泛型构造函数的歧义?

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:57 25 4
gpt4 key购买 nike

考虑以下 Swift 表达式

println(Generic<Foo, Bar>(1))

通常,人们会将其理解为对构造函数的通用调用 Generic<Foo, Bar>带有参数 (1) .

println( Generic<Foo,Bar>(1) )

然而,当稍微重新排列标记时,它也可以表示两个单独的比较,例如如果 GenericFoo是一些命名不当的数字变量:

println(Generic < Foo, Bar > (1))
// or, with proper parenthesis
println((Generic < Foo), (Bar > 1))

我们在这里可以观察到的是,具有像这样的通用构造函数的表达式是高度歧义的,即使对于人类来说也不容易消除歧义。这里的问题是 Swift 没有 new构造函数的关键字,这使得它们在某些情况下与方法调用和运算符不明确。因此,我对 Swift 编译器(解析器)如何消除上述表达式的歧义很感兴趣。它的解析方式取决于上下文(类型、变量、函数)还是可以由解析器解析?

最佳答案

答案很简单:编译器不允许您声明这些变量:

struct Generic<T, U> {

init(_ i: Int) {}
}
struct Foo {}
struct Bar {}

print(Generic<Foo, Bar>(1))

// error
let Foo = 0 // invalid redeclaration of Foo
let Bar = 3 // invalid redeclaration of Bar
let Generic = 5 // invalid redeclaration of Generic
print(Generic<Foo, Bar>(1))

使另一个源文件中的变量或类型声明成为当前声明“覆盖”另一个。

关于swift - Swift 如何消除泛型构造函数的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31652837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com