0
考虑这个通用的方法(只有类型非常重要,没有它做什么):将显式返回值添加到闭包导致编译器错误:编译器错误?
func flatMap<SourceType, TargetType>(source: [SourceType], transform: SourceType [TargetType]) -> [TargetType] {
return []
}
以下方法调用编译很好:
let seq = flatMap(["some", "string"], { s in [1, 2] })
然而,仅仅增加显式返回到封闭的情况下编译错误:
let seq = flatMap(["some", "string"], { s in return [1, 2] }) //ERROR: Cannot convert the expression's type ... to type 'StringLiteralConvertible'
编译器仍然可以按照与第一种情况相同的方式推断出类型,对吗?区别在哪里(我看不到)?如果我需要return
,如何编译第二个案例?
这看起来像是一个编译器bug。 – dasblinkenlight 2014-10-10 18:15:54
@dasblinkenlight我也会这么说。我想验证它,因为关于Swift类型系统有几个我认为是bug的东西,但是在发布到SO之后,向我解释它们意味着它们是如此甚至是特征。 – drasto 2014-10-10 18:30:19