By default, ColdFusion passes simple types (like numeric, string, and GUID) by value to functions. I’d like to pass a simple type by reference.
I’m currently wrapping a simple value in a struct (they get passed by reference). This solves my problem but it is very ugly:
<!--- TheFunctionName---->
<cffunction name="TheFunctionName">
<cfargument name="OutVariable" type="struct">
<cfset OutVariable.ID = 5>
</cffunction>
<cfset OutVariable=StructNew()>
<cfset TheFunctionName(OutVariable)>
<!--- I want this to output 5--->
<cfoutput>#OutVariable.ID#</cfoutput>
I’d rather something like this:
<!--- TheFunctionName---->
<cffunction name="TheFunctionName">
<cfargument name="OutVariable" passbyref="true">
<cfset OutVariable = 5>
</cffunction>
<cfset TheFunctionName(OutVariable)>
<!--- I want this to output 5--->
<cfoutput>#OutVariable#</cfoutput>
AFAIK, there’s no way to pass simple values by reference in ColdFusion. The only workaround I can think of is the one you’re already using.
Instead, I would suggest trying to restructure your program to work with the grain of the language. In cases where there’s only one simple value to “modify”, you could just make your function return the new value, and call it like:
In cases where you’re modifying multiple values, take a step back and think about whether it’s possible to bundle those multiple values up into a CFC with your mutator functions becoming methods of the CFC. This could be clearer and more maintainable solution anyway.