[swift-evolution] Making capturing semantics of local

Howard Lovatt howard.lovatt at gmail.com
Fri Oct 27 00:27:17 CDT 2017


> Closures cannot replace all uses of local functions. Local functions can
be recursive, and have a generic parameter list.

My response would be add these featurtes to closures, it will make closures
better.

In terms of recursion you can fiddle it:

struct RecursiveClosure<C> {
    var c: C! = nil
}
func factorial(_ n: Int) -> Int {
    var recursive = RecursiveClosure<(Int) -> Int>()
    recursive.c = { x in
        (x == 0) ? 1 : x * recursive.c(x - 1)
    }
    return recursive.c(n)
}
factorial(5) // 120


  -- Howard.

On 27 October 2017 at 15:53, Slava Pestov <spestov at apple.com> wrote:

>
>
> On Oct 26, 2017, at 9:52 PM, Howard Lovatt <howard.lovatt at gmail.com>
> wrote:
>
> It would be easy to provide a fixit.
>
>
> That is still a source breaking change that requires migration, though.
>
> How often are they actually used? I rarely use them and all my use cases
> could be a closure instead.
>
> Also see Mike Kluev example; local functions are arguably worse than
> closures in all cases (provided that you can appropriately annotate the
> function type).
>
>
> Closures cannot replace all uses of local functions. Local functions can
> be recursive, and have a generic parameter list.
>
> Slava
>
>
>   -- Howard.
>
> On 27 October 2017 at 12:26, Slava Pestov <spestov at apple.com> wrote:
>
>>
>>
>> On Oct 26, 2017, at 4:45 PM, Howard Lovatt via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> Rather than expand local function syntax why not deprecate local
>> functions completely
>>
>>
>> I don’t think at this point such a drastic change to the language is
>> likely to happen.
>>
>> Slava
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171027/19725c76/attachment.html>


More information about the swift-evolution mailing list