[swift-users] Why this can't compile
王 黎明
uomb at outlook.com
Thu Jun 30 05:29:37 CDT 2016
Thanks for you help!
在 2016年6月30日,上午11:58,Neil Faiman <neil.swift at faiman.org<mailto:neil.swift at faiman.org>> 写道:
On Jun 29, 2016, at 11:03 PM, boris via swift-users <swift-users at swift.org<mailto:swift-users at swift.org>> wrote:
//Report Error: Ambiguous reference to member ‘map’
//
numbers.map({
(number: Int) in
var ret = 3 * number
return ret
})
I asked the same question a few months ago; the answer was that it is a deliberate design choice that you can only omit the return type from a single-expression closure (and that the error message is less than helpful). For example, Jordan Rose offered this explanation:
Swift very deliberately does not infer types across multiple statements in closure bodies. This is mostly an implementation restriction (our type-checking system can't handle it very well), but it's also a simple rule that explains the implementation restriction, rather than having type inference in closure bodies working some of the time but not all.
As Chris pointed out, the compiler could definitely do a better job communicating the problem, but actually changing the behavior here would require significant implementation work. So this is not considered a "bug", just an implementation-driven design choice.
Regards,
Neil Faiman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160630/a8656ccf/attachment.html>
More information about the swift-users
mailing list