January 12, 2012 11:16 PM
http://wiki.ecmascript.org/doku.php?id=strawman:block_lambda_revival

I’m trying to understand the syntax:
BlockArguments :
     BlockLambda
     BlockArguments [no LineTerminator here] BlockLambda
     BlockArguments [no LineTerminator here] ( InitialValue )

- Wouldn’t this allow the following? BlockLambda [no LineTerminator here] BlockLambda

Yes.

- InitialValue means that paren-free can be combined with arguments that aren’t blocks, right?

Yes.

myLoopFunc(initValue1)(initValue2) { | arg1, arg2 | ... }

No, the myLoopFunc(initValue1) is a CallExpression -- see
CallWithBlockArguments :
    CallExpression [no LineTerminator here] BlockArguments
  The *return value* of that ordinary CallExpression is the callee of the paren-free call.

I think I would prefer the following (IIRC, more like Ruby):

myLoopFunc(initValue1, initValue2) { | arg1, arg2 | ... }


That parses, as described above. The two-argument CallExpression must return a function that takes the block arguments.

I see a problem in the grammar in the strawman, now that you mention it: no way to produce a simple identifier callee from CallExpression, so no

  map {|e| e*e}

only

  v.map {|e| e*e}

or

  get_map() {|e| e*e}

or similar. I will fix.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to