Status/Resolution/Reason: To Fix/Deferred/BugVerified
Reporter/Name(from Bugbase): Nathan Strutz / Nathan Strutz (Nathan Strutz)
Created: 03/12/2012
Components: Language
Versions: 2016,11.0,10.0,2018
Failure Type: Incorrect w/Workaround
Found In Build/Fixed In Build: Public Beta /
Priority/Frequency: Normal / Some users will encounter
Locale/System: English / Windows 7 SP1 64-bit
Vote Count: 1
Problem Description:
I would like to immediately invoke a function when it is returned from calling a function, but CF will not compile it.
Steps to Reproduce:
{code:java}
function function returnfunction(){
var x = " with closure";
return function(a="returnFunction default argument") {return a & x;};
}
writeOutput( returnFunction()() );
{code}
Actual Result:
Throws a syntax error:
Invalid CFML construct found on line 34 at column 38.
ColdFusion was looking at the following text:
(
Expected Result:
I expect the returned function to be invoked immediately, due to the second set of parentheses (). This is counterintuitive because of the way structs and arrays are addressable immediately after a function call. For example:
{code:java}
struct function getStruct() {
return {a:1,b:2,c:3};
}
writeOutput( getStruct()["b"] );
{code}
This code works as expected and prints "2" and the same works for arrays. It just seems like I should be able to immediately invoke the returned function without setting an extra variable.
Any Workarounds:
Set a variable to the returned function and invoke that.
----------------------------- Additional Watson Details -----------------------------
Watson Bug ID: 3135083
External Customer Info:
External Company:
External Customer Name: mrnate
External Customer Email:
External Test Config: My Hardware and Environment details:
Attachments:
Comments: