On 24/03/2021 21:00, Rowan Tommins wrote:
As Christian says, automatic capture is a dramatic change to the language's scoping rules, and IMHO requires a more thorough justification on why the current syntax is burdensome. As I've said previously, my naive impression is that a long list of captured variables ought to be as bad a code smell as a long list of parameters; I'm willing to be proven wrong on this, but nobody has yet stepped forward with a real-life example.
Automatic capture ceased to be a dramatic change from PHP the day after short closurers were introduced. So they've been a part of PHP for years now.
I hit long lists of use() repeatedly, almost always because I need to perform a series of operations within a callback, prime examples are database transactions and using throw-aware buffering handlers.
In general, anything that needs to wrap a code block in a complex set of instructions before and after.
To give my own example, earlier this week I wrote the following:
$x = function () use ($to, $library, $thread, $author, $title, $library_name, $top_post) { ... }
That was just to get those variables inside a callback that could be invoked inside a throw-aware buffering helper.
I believe that by explicitly stating my intent to use auto capture by using fn() { ... } that my code would have been cleaner with less noise.
If I thought otherwise, I would be under no obligation to use them and could use function() { ... } instead.
For me auto capture is a solid +1.
Mark Randall