On 30/12/2017 20:36, Ben Bacarisse wrote:
bartc <b...@freeuk.com> writes:
On 30/12/2017 16:53, mm0fmf wrote:
On 30/12/2017 14:41, bartc wrote:
it looks a bit naff
Understatement of 2017.
I'm honest about my own ideas, but my remarks were about the use of
special symbols such as "::" and "@".
Before completely dismissing it however, you should look at how
another language such as Python can achieve the same thing.
Namely, take any block of code within a function, and allow it to be
executed or shared from anywhere else in the function, with the
minimum of disruption.
That's what a local function does and it does it with the clean
semantics of a function call.
When this idea came up in comp.lang.c you could not see the point, yet
you appear to have a use-case common enough that you have a solution
worked out using gotos.
C doesn't in general have local functions. My own languages don't
implement them properly. So I tend not to use them.
If it looks better than what I'd come up with, then I'll use that instead.
What looks better is always going to be an unreliable and subjective
measure, but calling a named function almost certainly scales better and
will allow for better structuring (such as when one block needs to use
another one).
Using a local (or even non-local) function is what I'm trying to avoid,
as I prefer to keep the code inline, and not disrupt it too much.
You may also want to execute a block only temporarily, or as part of a
short test. So you don't want to go to the trouble of hoisting a block
of code into a local function.
(And in C, which has local block scopes, there would be trouble with
visibility of all the variables the block uses, unless the local
function is untidily placed right where the original block was.)
--
bartc
--
https://mail.python.org/mailman/listinfo/python-list