[swift-users] Why this can't compile
Neil Faiman
neil.swift at faiman.org
Wed Jun 29 22:58:23 CDT 2016
> On Jun 29, 2016, at 11:03 PM, boris via swift-users <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/20160629/78f9955b/attachment.html>
More information about the swift-users
mailing list