在Xcode中操场关闭的阵列做实验,我收到此错误:斯威夫特:暧昧使用运营商的“*”
Playground execution failed: error: closures.playground:11:25: error: ambiguous use of operator '*'
{x in x * x},
我不明白了一个道理语法为什么这是不工作的,但它应该是。
我的初始闭合是:
let f = {(x: Int) -> Int
in
return x + 42}
我然后将如此限定的数组:
let closures = [f,
{(x:Int) -> Int in return x * 2},
{x in return x - 8},
{x in x * x}, //This line causes the error.
{$0 * 42}]
每个封闭件的符合f
的签名,所以这是在Xcode错误?如果不是,发生了什么?
要燕尾上,不应类型在一种情况下可以推断,就像它是在所有其他情况下明确推断?
编辑:雨燕2.2,这似乎很好地工作,但我使用Swift3。
这似乎很好地工作,如果我们替换'X * x'与让说,'X * 8'。或者与一些常数相乘。 –
@RajanMaheshwari这是真的,但'x * x'遵循Swift语法规则,并且不起作用,这对我来说似乎有点儿麻烦。 – NonCreature0714
我猜它是因为编译器无法找到x变量与自身相乘的类型,因为它给出的数据类型为。然而,乘以一些int常量使其成为编译器 –