On Thu, Oct 1, 2015 at 8:58 AM, Nikita Nefedov <inefe...@gmail.com> wrote: > > I don't think there was a dozen of different ideas, I could only find > those about `lambda(arg-list; use-list; expression)` and variations of it > with different keywords and different return-type syntax. > I do understand that this is quite subjective, but neither this syntax nor > `fn(arg-list; use-list) expression` look obvious and easily readable to me. >
It doesn't look obvious because its new syntax. The first time I saw a for(var; bool; expr) I was totally confused, because I had only seen for var in range. But you know what? I looked at the docs and then knew how it worked, not that hard. > And one thing that makes auto capture much better choice than explicit > capture (as it've been said a couple of times already) is partial > application: > > $mul = fn($x) => fn($y) => fn($z) => $x * $y * $z; > > Looks simpler than: > > $mul = fn($x) => fn($y; $x) => fn($z; $x, $y) => $x * $y * $z; > > Yes it looks simpler, but if this is going to continue being the argument for auto-capturing can we at least get a real world example? I have never once in the wild seen a lambda that returns a lambda that returns a lambda, all using variables from the previous lamba(s). I'm fairly certain no one will invoke the overhead of a function call 3 times just to multiply 3 numbers together. Please give me a valid example if you want me to believe this to be a valid argument. There is no way in php that I know of to get access to a parent's scope, unless explicitly used which is only available on lambda/closures. Therefore, automatic closing of the variables is very much against the scoping rules of the language. It is totally unexpected for someone who has been using the language for many years.