Beg*_*ner 5 coldfusion removeall cfml coldfusion-11
我面临一段代码问题,略有修改我得到的结果不同,不应该是这种情况.
版本1给出了正确的结果,我遇到了版本2的问题,这是实际的代码.
版本1:
<cfset keywords = listToArray("1,2,3,4,5,6,7,8,9,10")>
<!--- Common Code Below --->
<cfoutput>#getMetadata(keywords).getName()#</cfoutput>
<cfset toBeAdded = keywords>
<cfset toBeInactivated = listToArray("1,3,4,6,8")>
<cfset toBeActivated = toBeInactivated>
<cfset toBeAdded.removeAll(toBeInactivated)>
<cfset toBeInactivated.removeAll(keywords)>
<cfset toBeActivated.retainAll(keywords)>
Run Code Online (Sandbox Code Playgroud)
版本2:
<cfset keywords = []>
<cfloop from="1" to="10" index="counter">
<cfset arrayAppend( keywords, counter )>
</cfloop>
<!--- If I add following line here then it is working as expected and similar to version 1: --->
<!--- <cfset keywords = listToArray(arrayToList(keywords))> --->
<!--- Common Code Below --->
<cfoutput>#getMetadata(keywords).getName()#</cfoutput>
<cfset toBeAdded = keywords>
<cfset toBeInactivated = listToArray("1,3,4,6,8")>
<cfset toBeActivated = toBeInactivated>
<cfset toBeAdded.removeAll(toBeInactivated)>
<cfset toBeInactivated.removeAll(keywords)>
<cfset toBeActivated.retainAll(keywords)>
Run Code Online (Sandbox Code Playgroud)
输出:
任何建议都非常感谢!
我不是Java人,而是我能说的......
在版本1中:keywords包含java.lang.String值,在版本2中:keywords包含java.lang.Double值.
在版本2中:toBeInactivated包含要从双精度数组中删除的字符串值.
由于这些Java类型不匹配,因此不会正确地从集合中删除它们.我猜测当CF传递底层对象数据时,它从未正确传输.老实说,当CF的所有东西都没有类型时,我都会期待.
在下面的@Twillen评论中添加,当你counter转换为以下类型时,这是有效的java.lang.String:
<cfset keywords = []>
<cfloop from="1" to="10" index="counter">
<cfset arrayAppend( keywords, javaCast("string", counter) )>
</cfloop>
<!--- Common Code Below --->
<cfoutput>#getMetadata(keywords).getName()#</cfoutput>
<cfset toBeAdded = keywords>
<cfset toBeInactivated = listToArray("1,3,4,6,8")>
<cfset toBeActivated = toBeInactivated>
<cfset toBeAdded.removeAll(toBeInactivated)>
<cfset toBeInactivated.removeAll(keywords)>
<cfset toBeActivated.retainAll(keywords)>
<cfdump var="#toBeAdded#" label="To Be Added">
<cfdump var="#toBeInactivated#" label="To Be Inactivated">
<cfdump var="#toBeActivated#" label="To Be Activated">
Run Code Online (Sandbox Code Playgroud)