Как функция Duplicate () помогает защитить целостность данных? - PullRequest
6 голосов
/ 24 декабря 2010
  1. Я хотел бы понять назначение функции Duplicate (), когда она используется с переменной, прежде чем она будет возвращена функцией.Было бы хорошо, если бы вы могли привести пример, когда использование Duplicate () важно или необходимо.
  2. Есть ли у него другие цели?

Я слышал, как другие упоминали Duplicate() в контексте целостности данных, и я хотел бы лучше понять, как это работает и когда его использовать.

Я часто вижу это:

<cfreturn Duplicate(local.myVariable)>

Когда этотакже возвращает тот же результат:

<cfreturn local.myVariable>

Ответы [ 2 ]

9 голосов
/ 25 декабря 2010

Хотя большинство переменных передаются по значению в ColdFusion, структуры не передаются - они передаются по ссылке , что может привести к непреднамеренной перезаписи значений, если вы не будете осторожны .

Использование Duplicate() создает идентичную копию переменной в другом месте в памяти, поэтому, когда она передается по ссылке (обратите внимание, что вы все еще передаете по ссылке, нет способа принудительно передать по значению) любой изменения, внесенные в данные от звонящего, не влияют на источник возврата.

2 голосов
/ 24 декабря 2010

Дубликат используется для передачи переменных по значению, а не по ссылке.

Структуры в ColdFusion обычно передаются по ссылке, если вы используете

cfset struct1 = struct2

Чтобы избежать изменений в struct1 при обновлении struct2, мы используем

cfset struct1 = duplicate (struct2)

...