gpt4 book ai didi

coldfusion - 如何在忽略组件的同时深度复制(克隆)结构

转载 作者:行者123 更新时间:2023-12-03 16:32:30 25 4
gpt4 key购买 nike

在 8 之前的 ColdFusion 版本中,如果结构中有任何组件,重复函数会抛出错误。在 8 及更高版本中它可以工作,但在复制组件时会出现问题。

因此,我需要一种方法来创建忽略组件的结构的深拷贝。出于我的目的,它用于调试,我需要代码中特定点的变量范围快照,因此效率并不重要,因为它永远不会脱离开发环境。目前使用 CF 7,如果只是为了解决这个紧迫的问题,我会接受 8 提供的功能,但我不控制升级 :(

最佳答案

当你在杀死脑细胞时,我尝试了一个递归函数;)它排除了组件和 java/com 对象。 MX7 都无法复制。我将函数放入一个组件中以避免篡改 variables 范围。然后将实例存储在 request 范围内。

它没有经过严格测试。所以我确信还有改进的余地。

用法

<cfset request.util = createObject("component", "Util")>
<cfset request.copy = request.util.duplicateStructMinusObjects(variables)>
<cfdump var="#request.copy#">

Util.cfc

<cfcomponent>
<cfscript>
function duplicateArrayMinusObjects(input) {
var x = "";
var value = "";
var output = arrayNew(1);

for (x = 1; x lte arrayLen(arguments.input); x = x + 1) {
value = arguments.input[x];

// note components are considered structures
if (IsStruct(value) and not IsObject(value)) {
arrayAppend(output, duplicateStructMinusObjects(value));
}
else if (IsArray(value)) {
arrayAppend(output, duplicateArrayMinusObjects(value));
}
else if (not IsObject(value)){
arrayAppend(output, duplicate(value));
}
}
return output;
}

function duplicateStructMinusObjects(input) {
var key = "";
var value = "";
var output = structNew();

for (key in arguments.input) {
value = arguments.input[key];

// note components are considered structures
if (IsStruct(value) and not IsObject(value)) {
output[key] = duplicateStructMinusObjects(value);
}
else if (IsArray(value)) {
output[key] = duplicateArrayMinusObjects(value);
}
else if (not IsObject(value)){
output[key] = duplicate(value);
}
}

return output;
}
</cfscript>
</cfcomponent>

关于coldfusion - 如何在忽略组件的同时深度复制(克隆)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7450764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com