[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