考虑以下 Swift 表达式
println(Generic<Foo, Bar>(1))
Generic<Foo, Bar>
通常,人们会将其解读为对带有参数的构造函数的通用调用(1)
。
println( Generic<Foo,Bar>(1) )
但是,当稍微重新排列标记时,它也可以表示两个单独的比较,例如 ifGeneric
和Foo
are 一些命名不佳的数字变量:
println(Generic < Foo, Bar > (1))
// or, with proper parenthesis
println((Generic < Foo), (Bar > 1))
在这里我们可以观察到,具有像这样的通用构造函数的表达式是高度模棱两可的,即使对人类来说也不容易消除歧义。这里的问题是 Swift 没有new
构造函数的关键字,这使得它们在某些情况下与方法调用和操作符有歧义。因此,我对 Swift 编译器(解析器)如何设法消除上述表达式的歧义很感兴趣。它的解析方式是依赖于上下文(类型、变量、函数)还是可以由解析器解析?