On Thursday, July 14, 2016 at 12:49:58 PM UTC+9, ZyX wrote:
> 2016-07-13 19:17 GMT+03:00 mattn <mattn...@gmail.com>:
> > On Wednesday, July 13, 2016 at 4:11:59 AM UTC+9, Bram Moolenaar wrote:
> >
> > Well, I wonder this lambda will be useful. At the first, we hoped to call 
> > statements in lambda. But the implementation you will include into vim 
> > can't do because it only allow expressions. It's similar to python's 
> > lambda. python's one doesn't allow statements. So usecase are limited to 
> > use. I don't have strong opinion but I'm thinking that this is an new 
> > expresssion or language for the lambda. It will demand to learn the new 
> > expression for the users.
> 
> Vim has `execute()`. Python-3 has `exec()` function (Python-2 has it
> as a statement). Lambdas do not usually allow statements because they
> are to be used in contexts which requires return value (e.g. in Python
> this is sorted()/list.sort(), defaultdict(), re.sub[n] (BTW, it is
> good idea to have `substitute(s, pattern, funcref, flags)` to work
> like `substitute(s, pattern, '\=funcref(submatch(0), submatch(1), …)',
> flags)`)). Lambdas are also used as a replacement for
> `functools.partial` (python)/`function(fref, args, self)` (VimL) in
> cases when they do not apply (e.g. when one needs to fix not the
> first, but second or other arguments), but this requires closures.

execute() doesn't have scope. So:

call execute("let a = 1")
echo 1

This define new variable in global scope. I want anonymous function. If 
execute() works with the scope, for example "let a = 1" mean "let l:a = 1", 
It's so great.

> If you need lambda with statement then most likely you are going to
> create unreadable code. Good lambdas are *small*, all examples you
> have shown in documentation are either
> 
> 1. More readable with new lambda style. It is absolutely not needed to
> write `return` and `a:` in `sort()` or `map()` callbacks.
> 2. Not practical. I still want to see an example of timer callback
> which is used for more practical applications then testing timers
> (like your echo) and yet is more readable with your variant of lambda
> among variants a) :function, b) new lambda style (+ execute()!) and c)
> your lambda style.

The arrow operator which bram suggested is new, I think.

> 3. Needs closures and not lambdas. I would not really say that your
> example with multiline lambda used for counter generator is better
> then with :function. Though it actually needs no closures in the
> current state:
> 
>         function s:counter(x)
>             let d = {'x': a:x}
>             function d.counter()
>                 let self.x += 1
>                 return self.x
>             endfunction
>             return d.counter
>         endfunction
> 
> And there is no new language, expressions are already used in a number
> of places.

-- 
-- 
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.

Raspunde prin e-mail lui