Implicit array/struct and function calls

This post is more than 2 years old.

I'm thinking this is something folks have blogged about before, but I just ran into it today. When using array and struct implicit creation, you cannot use the syntax directly in a udf/method call. Let me explain. Consider this example:

<cfset z = {name='r',age=34}> <cfset somefunc(data=z)>

In this example I use shorthand notation to creation a structure. I then pass it to somefunc as an argument named data. This works just fine. But this version, which should be the same, will give you a syntax error:

<cfset somefunc(data={name='r',age=34})>

I also tried the simpler form:

<cfset somefunc({name='r',age=34})>

Which also failed. It looks like you can only use the implicit creation in cfset statements. (Which is certainly ok, I'm just happy we have this shortcut!)

Raymond Camden's Picture

About Raymond Camden

Raymond is a senior developer evangelist for Adobe. He focuses on document services, JavaScript, and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA

Archived Comments

Comment 1 by Shane Zehnder posted on 12/27/2007 at 8:44 PM

I saw Sean and Dan Wilson talking about a similar subject the other day. I didn't realize we had an easier way to set up structures.

Good thing to know.

Comment 2 by Adrian Lynch posted on 12/31/2007 at 3:12 PM

The same is true of cfparam:

<cfparam name="test" default="#[1, 2, 3, 4]#">
<cfdump var="#test#">

I've also seen it flake out another way but can't remember how. Annoying but not the end of the world.

Comment 3 by Andrew posted on 1/14/2008 at 8:56 PM

I get this everytime I try to return struct from function.
You can't do:
<cfreturn {field=3, field2=true}>
you have to assign it to var first.
Seems really odd that it does not work.