Coldfusion的StructCopy&网址范围

时间:2014-02-18 12:27:47

标签: coldfusion coldfusion-10

今天我遇到了一个有趣的场景,使用带有URL范围的StructCopy。

我没有找到如何解决问题的答案 - 我知道/已经使用过structAppend / duplicate等

我想将URL范围复制到新结构中,以便我可以处理/更改它而不影响URL范围本身,因此我使用了structCopy( url )。我知道structcopy是struct的浅层副本,但是因为我的url范围只包含url params(据我所知 - 这是正确的吗?它们都是我对这种情况感兴趣),它们是字符串键/值然后我认为一个浅的副本就足够了(字符串是不可变的全部)。

但是,在复制URL范围时,会导致奇怪的行为 - 看起来好像structCopy(url)只返回url范围 - 而不是它的副本,而不是错误。例如,如果我执行以下操作(假设我有url查询参数,包括一个名为" rob":

<cfset local.clonedUrl = structCopy( url ) />
<cfdump var="#local.clonedUrl#">
<cfdump var="#url#">
<cfset structDelete( local.clonedUrl, "rob" ) />
<cfdump var="#local.clonedUrl#">
<cfdump var="#url#">

在上面的场景中,在struct delete调用之后,clonedUrl和URL都删除了条目(显然,使用正常创建的Struct而不是URL首先执行上述操作正确)

所以,我的问题是:

  1. 什么?我已经看到URL范围实际上是coldfusions URLScope类的一个实例,因此可能因为这个原因而区别对待,但是从structCopy调用返回相同的实例只是意思。至少如果它不能这样做,我会期待一个错误,而不是看起来非常类似于预期的结果,但实际上是我想要避免的行为。还注意到,如果我将组件传递给structCopy,它似乎有类似的结果。

  2. 什么是URLScope - 它是否扩展了Struct?当我转储类名时,我看到它是一个URLScope,但只是转储对象转储它就像一个Struct。任何人都有任何建议来查看对象的源代码或至少是API / Javadocs类型规范?

  3. 我使用的是CF10(我没有找到解决方法的答案 - 我知道/已经使用过structAppend / duplicate等)

1 个答案:

答案 0 :(得分:1)

感谢评论人员 - 结论是不使用带有URL对象的StructCopy()(可能还有Form范围对象等)。这是非常严峻的,但URL在技术上不是一个结构,所以所有的赌注都是关闭的。 (I moan some more here