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.