为什么这个清理功能的输出不变?

时间:2010-12-17 00:09:18

标签: coldfusion

我希望以下函数输出一个已清理的标签列表,但它会输出原始列表不变。但是,在每次迭代时转储local.i会显示符合预期的已清理标记:

<cfset this.tags = "tag!@%^-tag, anothersf-taggame, SDFSFtagged">

<cfset local.listPosition = 0>

<cfloop list="#this.tags#" index="local.i">
   <cfset local.i = ReReplace(local.i, "[^a-z0-9+##\-.]", "", "All")>
   <cfset local.listPosition = local.listPosition + 1>
   <cfset ListSetAt(this.tags, local.listPosition, local.i, ", ")>
</cfloop>

<cfoutput>
   #this.tags#
</cfoutput>

知道为什么会发生这种奇怪的行为吗?必须是ListSetAt()函数不将新值附加到列表中,但为什么?

1 个答案:

答案 0 :(得分:6)

listSetAt()不会改变列表。它返回带有更改的列表副本,因此您需要进行分配。

看起来这里有很多可用的优化。你为什么要在列表上循环?看起来如果你在正则表达式中允许逗号,你会得到与这个循环相同的结果。