キモイ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]
ちゃんと出やがりました><
シンプルにポインタを渡している訳じゃなく、変数への移送が何かしらの意味を持ってるんですねぇ。
キモー><