David Herman wrote: > > Does the |var| within the lambda define a var in the function body, > > and does that var declaration hoist to the top of the function body? > > Good catch, thank you. Since `lambda' is designed to have no implicit > semantics, it can't introduce a new `var' frame. IOW, the `var' would still > be hoisted to the nearest enclosing `function', not `lambda'. I'll add this > to the wiki page. > > Thanks, > Dave >
Also, I wonder why lambda in it's block-less form is restricted to expressions. I mean, why can't the following be valid? lambda() for (p in x) ... lambda() if (cond) ... else ... The reason block-less functions are restricted to expressions is that they have an implicit return. With lambdas, there is no implicit return - the lamba's returned value is always going to be the value of the tail position expression. With this change, this would simply the grammar down to: Expression ::= ... | lambda Formals Statement The advantage of this is that it will allow in the future more seamless "statement" macros that follow C conventions, i.e. a statement can include a nested block-less statement, e.g. stmtMacro() stmt. _______________________________________________ Es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

