On 31/12/2017 15:02, Ben Bacarisse wrote:
bartc <b...@freeuk.com> writes:

I think there's a problem with that.  Standard C does not have them, you
said your language does not implement them properly

(The real problem is I don't remember local functions being used anywhere else. It's an idiom I'm not used to and that apparently few other people use. Except perhaps in Python where they do to use advanced features over simpler ones.)

 and I think you are
new(ish) to Python.  What language did you try them in?  It may be that
it was overly complex in that language.  The idea is clean and simple.

It's not simple to implement. Not if you want full access to the non-static variables of the containing function(s). It doesn't sound that efficient either.

So in this case I disagree with dragging in named functions and
introducing an extra level of control flow just to avoid duplicating
half a dozen lines of code. I would just duplicate those lines (with a
comment that they have to match the other set so that they are
maintained in sync).

The suggestion was to use them to avoid gotos.  If duplicating is a good
idea (and it's a hard line to draw) then we are not talking about the
same cases.  Given the choice of "dragging in named functions" and
dragging in named blocks and gotos, I would choose the functions every
time.

The blocks don't need to be dragged; they are already in place!

It's funny because in c.l.c you're always advocating keep declarations as close to the point of use as possible. Here you appear to be saying the opposite: taking code away from the primary point of use.

(Which is likely to cause problems if the code includes breaks, or gotos if the language has them.)

I think there is a way to solve this pattern via special language features, while writing the main code primarily inline and in a natural structure, but I haven't found a satisfactory method yet. I don't think local functions is it.

(And perhaps a solution lies outside the language such as within an editor, to allow sharing of the same block of code in multiple locations.)

--
bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to