考虑以下Swift表达式
println(Generic<Foo, Bar>(1))
通常,将其作为对带有参数Generic<Foo, Bar>
的构造函数(1)
的通用调用。
println( Generic<Foo,Bar>(1) )
但是,当稍微重新排列令牌时,它也可以表示两个单独的比较,例如,如果Generic
和Foo
是一些命名较差的数字变量:
println(Generic < Foo, Bar > (1))
// or, with proper parenthesis
println((Generic < Foo), (Bar > 1))
我们可以在这里观察到的是,具有这样的通用构造函数的表达式是非常含糊的,即使对于人类也不容易消除歧义。这里的问题是Swift没有针对构造函数的new
关键字,这在某些情况下使它们与方法调用和运算符不明确。因此,我对Swift编译器(解析器)如何消除以上表达式的歧义很感兴趣。它的解析方式取决于上下文(类型,变量,函数)还是可以由解析器解析?
答案很简单:编译器根本不允许您声明这些变量:
至少有三种方法可以解决这个问题(可能还有更多)。