Swift如何消除通用构造函数的歧义?

问题描述 投票:4回答:2

考虑以下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编译器(解析器)如何消除以上表达式的歧义很感兴趣。它的解析方式取决于上下文(类型,变量,函数)还是可以由解析器解析?

swift parsing generics ambiguity ambiguous-grammar
2个回答
1
投票

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


0
投票

至少有三种方法可以解决这个问题(可能还有更多)。

© www.soinside.com 2019 - 2024. All rights reserved.