Nikolay Pavlov wrote:

> >> One of the points of initial suggestion was that `submatch()` is too
> >> long to type, `{m, c1, c2 -> c2 . c1 }` (pattern looks like `\(c1\)
> >> \(c2\)`, `m='c1 c2'`) is easier. Using lambdas like this just avoids
> >> escaping, though it alone already is a good improvement over current
> >> \= syntax.
> >
> > Yeah, I was wondering if we can pass the list of submatches to the
> > function.
> >
> >         substitute(text, '\<\k*\>', {m -> 'key-' . m[0]}, 'g')
> >
> > Currently it would be:
> >
> >         substitute(text, '\<\k*\>', {-> 'key-' . submatch(0)}, 'g'
> >
> > It does require that the function takes one argument, even when not
> > using it:
> >
> >         substitute(text, '\<\k*\>', {m -> 'key-' . g:key}, 'g')
> 
> Actually, not. It is possible to determine how many arguments a
> function accepts (also whether it accepts variable number, do not
> repeat one of the Neovim bugs) and construct argument list
> accordingly. Without this dealing with capturing groups may be tricky
> (specifically I mean cases when there *is* capturing group, but it
> matched nothing or it did not match: if I am not mistaking, regexp
> engine does not report how many capturing groups there are in the
> pattern).
> 
> Note: unless `text` could be a list `submatch()` is no longer needed
> for substitute() with lambdas: the only feature lambdas do not provide
> here is the second non-zero argument of submatch().
> 
> Probably, the easiest implementation would be something like below,
> but it has one downside: it will allocate memory for all captured
> groups and match, even if none are used (note: I have neither tested
> nor compiled this, it just shows the idea).

Well, yes, I suppose you could only pass the argument if the function
wants it.  Or ignore the function taking fewer arguments.

I don't see a good reason to pass each submatch as a separate argument.
A list is much more convenient.  The user is already used to the number
from "\1" in the :s command.  A list of arguments is a hassle if only
using the third one.

It does require allocating a list, but since the matching costs
something anyway it won't be much extra.


-- 
ARTHUR:  Be quiet!
DENNIS:  --but by a two-thirds majority in the case of more--
ARTHUR:  Be quiet!  I order you to be quiet!
WOMAN:   Order, eh -- who does he think he is?
ARTHUR:  I am your king!
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui