Am 2016-09-21 00:00, schrieb Ken Takata:
Hi Christian,

2016/9/21 Wed 5:31:26 UTC+9 Christian Brabandt wrote:
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:
  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"']

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.


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

--- 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 
For more options, visit

Raspunde prin e-mail lui