Am 2016-09-21 00:00, schrieb Ken Takata:
Hi Christian,
2016/9/21 Wed 5:31:26 UTC+9 Christian Brabandt wrote:
Hi,
I think I found a bug with lambda expressions.
I was looking into writing some automated tests and was trying to use
the new lambda expressions. However this does not work as expected:
Here is an example:
#v+
let a = ['FOOBAR "word"', 'FOOBAR "word2"']
let pat='^FOOBAR\s\+\zs"[^"]\+"'
let pat2='^FOOBAR\s\+\("[^"]\+"\)'
:echo map(copy(a), 'matchstr(v:val, g:pat)')
-> result ['"word"', '"word2"']
:echo map(copy(a), {val -> matchstr(val, g:pat)})
-> BUG: result ['""', '""'], expected ['"word"', '"word2"']
:echo map(copy(a), 'substitute(v:val, g:pat2,
''\=submatch(1)'',"")')
-> result ['"word"', '"word2"']
:echo map(copy(a), {val -> substitute(val, g:pat2, '\=submatch(1)',
'')})
-> BUG: result ['0', '1'], expected ['"word", '"word2"']
#v-
This is not a bug. map() always passes two arguments (key and val) to
the
specified Funcref. So,
:echo map(copy(a), {val -> matchstr(val, g:pat)})
this should be:
:echo map(copy(a), {key, val -> matchstr(val, g:pat)})
Or you can still use v:val:
:echo map(copy(a), {-> matchstr(v:val, g:pat)})
Hm, should there be an error when only one argument is given?
Or at least it should be more stressed in the documentatio, that two
arguments
are expected.
Best,
Christian
--
--
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.