Creating A VARIABLES-Scoped Function Of The Same Name
I have 5 minute before my lunch break is over and I just wanted to try this (not very exciting at all). What happens when you have a VARIABLES-scoped user defined ColdFusion function that has the same name as a built in ColdFusion function. The test:
<!---
Create a very simple UDF that simply echoes
back the first argument that it is passed.
--->
<cffunction name="Echo">
<cfreturn ARGUMENTS[ 1 ] />
</cffunction>
<!--- Assign this UDF to the "Find" key within variables. --->
<cfset VARIABLES.Find = VARIABLES.Echo />
<!--- Now, try to call this both with and without a scope. --->
#VARIABLES.Find(
"Naughty",
"Naughty robot!"
)#
#Find(
"Naughty",
"Naughty robot!"
)#
Running the above code, we get the output:
Naughty
1
Calling the UDF with the original VARIABLES scope calls our UDF. Calling it without the scope invokes the built-in ColdFusion method. Interesting.
Ok, what about if we do the same thing as above, but this time, we do NOT use the VARIABLES scope at all:
<!---
Set the Echo method directly into the non-scoped
Find variable.
--->
<cfset Find = VARIABLES.Echo />
<!--- Now, try to call this both with and without a scope. --->
#VARIABLES.Find(
"Naughty",
"Naughty robot!"
)#
#Find(
"Naughty",
"Naughty robot!"
)#
Running the above, we get the output:
Naughty
1
Exactly the same effect whether or not we use the VARIABLES scope. Kind of interesting. Nothing really important here. The only strange thing is that if you do this:
<cfdump var="#GetMetaData( Find )#" />
It gives you the UDF meta data and NOT the built in ColdFusion method meta data.
Ok, back to work :)
Want to use code from this post? Check out the license.
Reader Comments
Presumably if you do getmetadata( variables.find ) you get the data you expect?
Ben,
Super cool tip. It also looks like a good way to play a practicable joke on a CF developer.
David.