On 2020-09-27, Bram Moolenaar <Bram@moolenaar.net> wrote:
>> I have two questions/curiosities:
>>
>> 1. I was not able to pass lambdas to defs, only funcrefs. Can/will this
>>    be supported?
>
> Can you give an example of what does not work?
This is what I have tried:
    vim9script
    def Filter(l: list<string>, Cond: func(string): bool): list<string>
      let res = []
      for item in l
        if Cond(item)
          add(res, item)
        endif
      endfor
      return res
    enddef
    def Filter2(l: list<string>, Cond: func(string): bool): list<string>
      return filter(copy(l), Cond)
    enddef
    def MyCond(v: string): bool
      return v =~ '^a'
    enddef
    let x = ['a', 'b', 'c']
    Filter(x, MyCond)
    # OK
    Filter(x, funcref(MyCond))
    # OK
    Filter(x, { v -> v =~ '^b' })
    # E1013
    Filter2(x, { v -> v =~ '^b' })
    # Ditto
I have tried other variations of the signatures, such as 'func', but
without luck. Also tried to add types to the lambda, as in:
   { v: string -> ... }
but that gives E720 (not that I expected it to work).
>> 2. Has a type aliasing or "typedef" mechanism been considered or,
>>    perhaps, already planned? My use case is defining a library of opaque
>>    types, which I can change without the need to modify client code.
>
> Yes, typedefs are planned to be added at some point.  We can make
> everything work without it, so it's for later.
That's great!
Life.
-- 
-- 
You received this message from the "vim_use" 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_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/rkq4el%24p4m%241%40ciao.gmane.io.
No comments:
Post a Comment