Неважно, как долго вы думаете/ищете, вы всегда придумываете ответ сразу после того, как вы зададите вопрос.
Я смог решить это путем преднамеренного неправильного использования try/catch, поэтому я зациклился на структуре, попытался создать объект из каждого элемента, как если бы он был компонент и ошибка, скопировали его в мою структуру моментальных снимков. Мне также пришлось хранить его в другой области, в моем случае я использовал сеанс, так как если бы я позволил ему перейти к переменным по умолчанию, была бы круговая ссылка, которая вызывает структура с бесконечным числом детей.
EDIT: Это не то, что я думал, что это DID, СМОТРИТЕ НИЖЕ
<cfset session.varSnapShot = StructNew()>
<cfset loopList = StructKeyList(variables)>
<cfloop from="1" to="#ListLen(loopList)#" index="i">
<cftry>
<cfobject name="x#i#" component="#variables[ListGetAt(loopList,i)]#">
<cfcatch>
<cfset session.varSnapShot[ListGetAt(loopList,i)]= variables[ListGetAt(loopList,i)]>
</cfcatch>
</cftry>
</cfloop>
EDIT: Так как выше на самом деле не делать глубокую копию (спасибо Leigh) Я пришел с этим:
<cfloop from="1" to="#ListLen(loopList)#" index="i">
<cfset metaData = GetMetaData(variables[ListGetAt(loopList,i)])>
<cfif isStruct(metaData) AND isDefined("metaData.type") AND metaData.type EQ "component">
<cfelse>
<cfset session.varSnapShot[ListGetAt(loopList,i)]= duplicate(variables[ListGetAt(loopList,i)])>
</cfif>
</cfloop>
Это делает глубокую копию, но все равно будет проблемой, если компонент находится ниже первого уровня объекта. Я хотел создать рекурсивный метод, но через полтора часа он уходит в пятницу. Вместо этого я буду убивать клетки мозга в пабе и, возможно, обновить это с помощью рекурсивного метода в понедельник, если не забуду.
Я думал об этом подходе, когда-то читал вопрос в RSS :) – Sergii
Великие умы;) (Это случилось со мной на нескольких ваших ответах). Конечный результат был немного проще, чем я думал. Благодарим за рекурсию. – Leigh
Взгляните на шаблон оформления Memento - когда вы нажмете объект, я склоняюсь к вызову Memento и получаю его, чтобы возвращать как структуру все свойства этого объекта в его текущем состоянии.Был отличным способом отладки таких вещей, как состояние сеанса, и означал, что я не сбрасывал физические объекты. –