Created
May 8, 2011 16:51
-
-
Save rwaldron/961495 to your computer and use it in GitHub Desktop.
Thinking outloud, exploring ideas that might compete with # or -> as function shorthands. Recreating examples form http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
( ( <argument-list> ) <expression> | <block> ) | |
var identity = (( x ) { | |
x; // with tail calls | |
}); | |
var f = (( a, b, c ) { | |
// a, b, c | |
}); | |
f( a, b, c ); | |
var obj = { | |
f: () { | |
// who needs a label? | |
} | |
}; | |
obj.f(); | |
otherFunction( "arg", ( /.../ ) { | |
// used as a callback | |
}); | |
// The following adapted from `strawman:arrow_function_syntax` | |
// Primary expression body [...] | |
let identity = ( (x) { x } ); | |
// ...or...? | |
let identity = ( (x) x ); // bad | |
// Lower-precedence expression with body. curly braces? | |
let square = ( (x) { x * x } ); | |
// ...or...? | |
let square = ( (x) x * x ); // bad | |
// In cases where a function expression is expected, outer parens are omitted | |
setTimeout( () { | |
// do stuff | |
}, 1000 ); | |
// returning, nesting & closures (narcissus parser testing) | |
(function( global ) { | |
global.Module = (() { | |
var identity = ((x) { x }), | |
square = ((x) { x * x }), | |
hasFoo = (( obj ) { | |
var ret = "no foo"; | |
if ( obj.foo ) { | |
ret = "has foo"; | |
} | |
ret; | |
}); | |
return { | |
hasFoo: hasFoo, | |
identity: identity, | |
square: square | |
}; | |
})(); | |
})( this ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks! That's very helpful, as I'm working on implementing these ideas in Narcissus and this feedback is incredibly useful