In some of my CFC's, I define my functions in script (since I've written
script-based CFCs in Railo/ACF, quickest port was to wrap in <cfscript> and
<cfcomponent>)
Noticed some odd behavior when my function has multiple params with defaults,
and I explicitly set a value other than the first param.
Code for reference:
obj.cfc:
<cfcomponent>
<cfscript>
function foo(a=1,b=2,c=3) {
writedump(arguments); // contrived little example
}
</cfscript>
</cfcomponent>
test.cfm:
<cfscript>
myObj = new obj();
myObj.foo();
myObj.foo(a=4); // works correctly
myObj.foo(b=4); // a disappears, and b unchanged!
myObj.foo(c=4); // a disappears and c unchanged!
myObj.foo(b=4,c=5); // a disappears and c unchanged - but b works?
myObj.foo(c=5, b=4); // despite reversed order, same result as last line
</cfscript>
When you explicitly set the value of anything other than the first param, it
loses the first param, and no arguments change. However, if you set more than
one value, it seems that only the last argument doesn't change (first param
still missing).
Confirmed that it behaves correctly if you use <cffunction> based methods. I
can't replicate this bug in UDF's, only CFCs. Bug seems to exist whether you're
in a method or an implicit constructor (function name init(), arguments in new
invocation) - I actually discovered this when I added a second param to one of
my constructors.
The obvious solution is to switch to all <cffunction> methods, but this is
still a pretty big core bug, IMO.
Billy Cravens
[email protected]
--
online documentation: http://openbd.org/manual/
google+ hints/tips: https://plus.google.com/115990347459711259462
http://groups.google.com/group/openbd?hl=en