Swift编译器无法解决+;泛型函数中数组的运算符

Swift编译器无法解决+;泛型函数中数组的运算符,swift,generics,operator-overloading,Swift,Generics,Operator Overloading,我在使用plus操作符时遇到了一些问题,所以我决定进行调查,并以下面的示例结束。当我编译 func f<T>(t: T) -> [T] { return [t] + [t] } 我找到了几种方法来实现这一点,例如返回([t]as[t])+[t]+[t],或者: func f<T>(t: T) -> [T] { let t1 = [t] return t1 + [t] + [t] } 更新 我忘了在语句中添加括号(无论是([t]+[t

我在使用plus操作符时遇到了一些问题,所以我决定进行调查,并以下面的示例结束。当我编译

func f<T>(t: T) -> [T]
{
    return [t] + [t]
}
我找到了几种方法来实现这一点,例如
返回([t]as[t])+[t]+[t]
,或者:

func f<T>(t: T) -> [T]
{
    let t1 = [t]
    return t1 + [t] + [t]
}
更新


我忘了在语句中添加括号(无论是
([t]+[t])+[t]
还是
[t]+([t]+[t])
)都不会编译,而
返回(+)([t],[t]+[t]
会编译。

所以我按照哈米什的建议并提交了文件。根据乔丹·罗斯的说法,这在《大师》中仍然被打破。当有任何关于这个bug的消息时,我会更新这个答案。

看起来像是类型检查器在将多个二进制运算符链接在一起时被拉伸得太远的另一种情况(),因为它显著增加了重载解析的复杂性(特别是在使用数组文本作为操作数的情况下)。在任何情况下,都可以。@Hamish:数组文字有什么特殊之处?对于各种协议,
+
存在多个重载,它们可以解释为?数组文本可以解释为符合
ExpressibleByArrayLiteral
的任何具体类型,这进一步使重载解析复杂化(尽管如果不能推断它们是特定的具体类型,它们将默认为
Array
)。
func f<T>(t: T) -> [T]
{
    return [t] + [t] + [t]
}

main.swift:30:9: error: cannot convert value of type '[T]' to expected argument type '[_]' (aka 'Array<_>')
    return [t] + [t] + [t]
           ^~~
               as! [_]
func f<T>(t: T) -> [T]
{
    let t1 = [t]
    return t1 + [t] + [t]
}
$ swift --version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9