"...in CF 5, you can't create a complex data object and create and initialize a member within that object in one statement"
Ok, so in CF5, can't do it, so not an issue. Back to CFMX...I agree that this would be a small bug. I would expect CF to overwrite the scalar variable as well. "...it'll only occur within arguably sloppy code" I knew someone was gonna say that ;) "<cfset myStruct.1 = "foo">" That actually works fine ;) chris kief -----Original Message----- From: Dave Watts [mailto:dwatts@;figleaf.com] Sent: Friday, November 01, 2002 11:56 AM To: '[EMAIL PROTECTED]' Cc: '[EMAIL PROTECTED]' Subject: RE: *CFMX* variable creation - is this normal behavior? or a bug? > When creating an array or structure, CF allows things > like this: > > <cfset myArray[1] = "foo" /> > <cfset myStruct.1 = "foo" /> > > But if the variable has been previously set to a different > data type (string in this case) like so: > > <cfset myArray = "foo" /> > <cfset myStruct = "foo" /> > > <cfset myArray[1] = "foo" /> > <cfset myStruct.1 = "foo" /> > > the following error is received: > > You have attempted to dereference a scalar variable of type > class java.lang.String as a structure with members. > > You must specifically declare the variable as the new data > type to prevent errors: > > <cfset myArray = "foo" /> > <cfset myStruct = "foo" /> > > <cfset myArray = arrayNew(1) /> > <cfset myStruct = structNew() /> > > <cfset myArray[1] = "foo" /> > <cfset myStruct.1 = "foo" /> > > Was this a problem in CF5? Is this an expected behavior or a > bug in CFMX? It should be mentioned that going the opposite > direction works just fine: > > <cfset myArray[1] = "foo" /> > <cfset myStruct.1 = "foo" /> > > <cfset myArray = "foo" /> > <cfset myStruct = "foo" /> To the best of my knowledge (and I'm too lazy to actually test this right now), in CF 5, you can't create a complex data object and create and initialize a member within that object in one statement: <!--- won't work in CF 5, will work in CFMX ---> <cfset myArray[1] = "foo"> <cfset myStruct.One = "foo"> So, in CF 5, this problem would never have arisen, because you'd have to use ArrayNew or StructNew first anyway. I do agree with you that this is a bug in CFMX, though - I would think the expected behavior would be for CF to overwrite the scalar variable with the new complex variable, then initialize the member. I don't think this is a serious bug, though, since it'll only occur within arguably sloppy code - you shouldn't be overwriting variables willy-nilly, and if you do overwrite a variable, it's probably a good idea to explicitly overwrite the variable in a single step, then create and initialize a member within it. Also, I don't think you can do something like this, even in CFMX (although again, I haven't tested it): <cfset myStruct.1 = "foo"> With dot notation, I believe that the member name has to be a valid variable name, which "1" isn't. So, you could do this: <cfset myStruct["1"] = "foo"> Dave Watts, CTO, Fig Leaf Software http://www.figleaf.com/ voice: (202) 797-5496 fax: (202) 797-5444 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4 Subscription: http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4 FAQ: http://www.thenetprofits.co.uk/coldfusion/faq Signup for the Fusion Authority news alert and keep up with the latest news in ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm

