Implicit array/struct and function calls

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!)

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.