我想了解对于程序员和编译器来说,在合理的时间内编译以下代码可能是最不痛苦的方式
extension Array {
func unflat() -> [[Element]] {
return self.map{[$0]}
}
}
let EnglishLayout: [[String]] = [
["1", "!"],
["2", "@"],
["3", "#"],
["4", "$"],
["5", "%"],
["6", "^"],
["7", "&"],
["8", "*"],
["9", "(", "-", "_"],
["0", ")", "=", "+"],
["Q", "`", "~"]
] + ["W", "E", "R", "T", "Y", "U", "I"].unflat() + [
["O", "[", "{"],
["P", "]", "}"],
] + ["A", "S", "D", "F", "G", "H", "J"].unflat() + [
["K", ";", ":"],
["L", "'", "\""],
["\\", "|"],
] + ["Z", "X", "C", "V", "B", "N", "M"].unflat() + [
[",", "<"],
[".", ">"],
["/", "?"],
]
它根本无法用“太复杂的类型表达式”为我编译
我添加了分析标志来构建设置并注释掉最后两部分
-Xfrontend -warn-long-expression-type-checking=100
显然 Swift 编译器太聪明了,无法选择阻力最小的路径,而只是按照程序员的指示将数组与显式类型声明连接起来。来自 Dart 和 TypeScript 对我来说如何解决这样的问题一点也不明显。