キモイCFML。

小一時間悩んだのですが、こんな現象が起きました。
ちなみに、ColdFusion8(Developer Edition)@Windows Vista

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
	<cfoutput>
		<body>
			<cfset VARIABLES.in=QueryNew("col1,col2", "VarChar,VarChar") />
			<cfset QueryAddRow(VARIABLES.in, 2) />
			<cfset QuerySetCell(VARIABLES.in, "col1", "aaaa", 1) />
			<cfset QuerySetCell(VARIABLES.in, "col2", "bbbb", 1) />
			<cfset QuerySetCell(VARIABLES.in, "col1", "ccccc", 2) />
			<cfset QuerySetCell(VARIABLES.in, "col2", "ddddd", 2) />
			<cfset doTest1(VARIABLES.in) />
			<hr />
			<cftry>
				<cfset doTest2(VARIABLES.in) />
				<cfcatch>
					<cfdump var="#cfcatch#" expand="false" />
				</cfcatch>
			</cftry>
			<hr />
			<cfset doTest3(VARIABLES.in) />
		</body>
	</cfoutput>
</html>

呼び出し元としてこんなコードを書きまして、んで以下にdoTest1、doTest2、doTest3と書く訳ですが。。。

■doTest1

<cffunction name="doTest1" access="private" output="true" returntype="void">
	<cfargument name="q" type="query" required="true" />
	<cfloop query="ARGUMENTS.q">
		<cfoutput>
			col1:[#ARGUMENTS.q.col1#]<br />
			col2:[#ARGUMENTS.q.col2#]<br />
		</cfoutput>
	</cfloop>
</cffunction>

■結果
col1:[aaaa]
col2:[bbbb]
col1:[ccccc]
col2:[ddddd]

これは当たり前ですが、結果がきちんと出ました。キモイのはこれから。

■doTest2

<cffunction name="doTest2" access="private" output="true" returntype="void">
	<cfargument name="q" type="query" required="true" />
	<cfset var colList=ARGUMENTS.q.ColumnList />
	<cfset var idx="" />
	<cfloop query="ARGUMENTS.q">
		<cfoutput>
			<cfloop index="idx" list="#colList#">
				#idx#:[#ARGUMENTS.q[idx]#]
			</cfloop>
		</cfoutput>
	</cfloop>
</cffunction>

■結果
複合 object 型を単純値に変換できません。

■StackTrace

coldfusion.runtime.CfJspPage$ComplexObjectException: 複合 object 型を単純値に変換できません。 at coldfusion.runtime.Cast._String(Cast.java:962) at cftest12ecfm1636235010$funcDOTEST3.runFunction(D:\home\ColdFusion8\wwwroot\examples\_test1\test1.cfm:56) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418) at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360) at (ry

エラーになります><

で、こうしてみると。。。

■doTest3
<cffunction name="doTest3" access="private" output="true" returntype="void">
	<cfargument name="q" type="query" required="true" />
	<cfset var colList=ARGUMENTS.q.ColumnList />
	<cfset var idx="" />
	<cfset var temp="" />
	<cfloop query="ARGUMENTS.q">
		<cfoutput>
			<cfloop index="idx" list="#colList#">
				<cfset temp=ARGUMENTS.q[idx] />
				#idx#:[#temp#]<br />
			</cfloop>
		</cfoutput>
	</cfloop>
</cffunction>

■結果
COL1:[aaaa]
COL2:[bbbb]
COL1:[ccccc]
COL2:[ddddd]

ちゃんと出やがりました><


シンプルにポインタを渡している訳じゃなく、変数への移送が何かしらの意味を持ってるんですねぇ。
キモー><