Hi all,
I've run a simple test on Adobe CF 9 which returns the same value as
BD.NET, i.e. array assignment is passed by value, and makes no
difference whether it's var or not. It seems the oddity is with Open
BD. Kindly advise, thanks.
<cfset arTest=ArrayNew(1)>
<cfset arTest[1] = "test abc">
<cfset arTest[2] = "test recycle bin">
<cfset arTest[3] = "test content">
<cfset arTestNew = arTest>
<cfset ArrayDeleteAt(arTest,2)>
Variables:
<cfdump var="#arTest#">
<cfdump var="#arTestNew#">
<cffunction name="testArray">
<cfset var arTest=ArrayNew(1)>
<cfset arTest[1] = "test abc">
<cfset arTest[2] = "test recycle bin">
<cfset arTest[3] = "test content">
<cfset var arTestNew = arTest>
<cfset ArrayDeleteAt(arTest,2)>
<br><br>
Var:
<cfdump var="#arTest#">
<cfdump var="#arTestNew#">
</cffunction>
<cfset testArray()>
On Jun 24, 8:23 am, AlexS <[email protected]> wrote:
> Hi Alan,
>
> I appreciate there is some code in there that supports by value to
> functions but it doesn't seem to be byvalue if the var keyword is used
> inside the function which is where I think the inconsistency with ACF
> is coming from. Using VAR or not I don't believe should alter the
> behaviour.
>
> Many thanks
>
> A
>
> On Jun 24, 1:11 am, "Alan Williamson (aw2.0 cloud experts)"
>
>
>
>
>
>
>
> <[email protected]> wrote:
> > I honestly can't believe someone actually designed it this way at ACF.
> > I mean how confusing do you want to make a language? We all know some
> > of the other quirks of the language which again, we've discussed
> > historically on this list.
>
> > Complex types should _always_ be passed by reference, never by value.
> > The fact they do in certain circumstances is just wrong. The vast
> > majority of languages operate this way.
>
> > However, we do support this "wrongness" - ACF of passing an array by
> > value to UDF functions. Trust me, that is a whole host of code we
> > would like to rip out of the engine/language. Instead we provide a
> > means to turn this off, which is a flag i have flipped all the time.
>
> > The issue however isn't that passing arrays by value is wrong, what is
> > wrong, is that ACF has failed to be consistent across everything. Why
> > should a UDF function be different from a built-in function? This just
> > makes it harder for the poor CFML developer to figure out whats-what.
> > Another area that they fail to provide is named-arguments for core
> > functions (something we do).
>
> > CFML is meant to be easy, straight forward and powerful. We don't need
> > these quirks.
>
> > AlexS wrote:
> > > Sorry the test case WW has posted doesn't show the whole picture but
> > > her description does describe that this involves a method.
>
> > > What we're seeing is that if the VAR keyword is not used then the
> > > array is passed by Value into the function which is consistent with
> > > normal Coldfusion behaviour.
>
> > > However when the VAR keyword is used then it passes by reference.
>
> > > Where as obviously with Structs in both instances its passed by
> > > reference
>
> > > Also note this
> > > urlhttp://www.bennadel.com/blog/141-ColdFusion-Arrays-Passed-By-Value.htm
> > > which describes the scenario but actually I don't believe Open BD is
> > > exhibiting this behaviour which i believe it should.
>
> > > I haven't confirmed that CF9 behaves the same way but the inclusion of
> > > not of the VAR keyword effecting arrays in this way to me seems odd.
>
> > > A
--
official tag/function reference: http://openbd.org/manual/
mailing list - http://groups.google.com/group/openbd?hl=en