Christian wrote:

> I am getting the error in the subject in a script I am writing. I have
> found that the culprit is the use of statements in a lambda.
> 
> This is a minimal example showing the problem:
> 
>     vim9script
> 
>     def Bind(x: number): func(string): any
>       return (s) => x
>     enddef
> 
>     def Bind2(x: number): func(string): any
>       return (s) => {
>         return x
>       }
>     enddef
> 
>     var B = Bind(42)
>     var B2 = Bind2(42)
> 
> While Bind() is executed correctly, Bind2() raises the error. Am I doing
> something wrong?
> 
> (This is of course a contrived example: in my script, the lambda
> contains a few statements, so I must use {}).

You are missing the return type in the lambda:

     def Bind2(x: number): func(string): any
       return (s): any => {  # ": any" added here
         return x
       }
     enddef

Perhaps it's a bit strange that the argument doesn't require a type but
the return type is required...  The problem is that in a lambda without
{} there can be only one return, the value of the expression, which is
then used for the return type.  With the {} form you could have multiple
return statements, thus the compiler likes to check the type.

One way to solve this is to also require argument types for the {} form.
That way it becomes more an inline :def function than a lambda.

A more complicated solution (for the compiler) is the take the common
type of all the return statements.

Thoughts?


-- 
hundred-and-one symptoms of being an internet addict:
248. You sign your letters with your e-mail address instead of your name.

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/202105081235.148CZrHv1627150%40masaka.moolenaar.net.

Reply via email to