변수 복제 함수 (variable_clone)
이 문서에서는 variable_clone
함수에 대해 설명합니다. 이 함수는 전달된 값을 복제하여 새로운 복제본을 반환합니다. 중첩된 구조체와 배열을 최대 128 깊이까지 복제할 수 있으며, 이 깊이는 선택적으로 depth
매개변수를 제공하여 변경할 수 있습니다.
사용 주의 사항
- 생성자를 사용하여 생성된 구조체를 복제할 경우, 새로운 구조체도 원래 생성자의 인스턴스가 됩니다.
- 복제할 구조체에 "self"가 포함된 메서드가 있을 경우, 새로운 구조체의 메서드 복제본은 원래 "self"의 복제본에 다시 바인딩됩니다. 이는 원래의 관계를 반영합니다.
- 만약 메서드의 "self"가 복제할 구조체에 존재하지 않는다면, 메서드의 복제본은 원래 "self"에 바인딩됩니다.
- 내장 데이터 구조체와 인스턴스는 복제되지 않으며, 이 유형의 변수는 실제 값(데이터 구조체 참조 또는 인스턴스 핸들)이 복사됩니다.
- 시퀀스 및 애니메이션 곡선과 같은 내장 구조체는 이 함수를 사용하여 복제할 수 없습니다.
문법
variable_clone(value[, depth]);
매개변수 설명
매개변수 | 유형 | 설명 |
---|---|---|
value | Any | 복제할 값 |
depth | Real | 중첩 구조체의 경우 복제할 최대 깊이. 기본값은 128입니다. |
반환값
- Any: 복제된 값
예제
예제 1: 기본 사용법
var _the_original = {a: "some text", b: [1, 2, 3, 4, 5], c: 6};
var _the_clone = variable_clone(_the_original);
위 코드는 먼저 임시 구조체 변수 _the_original
을 정의합니다. 그런 다음 variable_clone
을 사용하여 이 변수에서 복제본을 생성합니다. 새로운 변수는 다른 변수 _the_clone
에 저장됩니다.
예제 2: 메서드 복제
the_struct = {
my_value: 12,
my_method: function() { show_debug_message($"My value is: {my_value}"); }
};
the_new_struct = variable_clone(the_struct);
the_new_struct.my_value = 24;
the_struct.my_method();
the_new_struct.my_method();
위 코드 예제는 메서드를 포함하는 구조체를 복사하는 예를 보여줍니다. 먼저 두 개의 변수를 가진 구조체가 정의됩니다: my_value
는 값 12를 저장하고, my_method
는 이 구조체에 바인딩된 메서드를 저장합니다. 구조체는 변수 the_struct
에 저장됩니다. 다음으로, 메서드를 포함하여 구조체가 복제됩니다. 메서드는 구조체 자체에 바인딩되어 있으므로, "self"는 복제할 구조체에 존재하며, 복제본의 "self"는 원래 "self" 구조체의 복제본에 다시 바인딩됩니다. 새로운 구조체의 my_value
변수는 24로 설정됩니다. 마지막으로 각 구조체의 메서드가 호출됩니다. 원래 구조체의 메서드를 호출하면 12가 출력되고, 복제된 구조체의 메서드를 호출하면 24가 출력됩니다.
활용 예제
예제 3: 중첩 구조체 복제
var nested_struct = {
level1: {
level2: {
value: 42
}
}
};
var cloned_nested = variable_clone(nested_struct);
예제 4: 깊이 제한 설정
var complex_struct = {
a: { b: { c: { d: 100 } } }
};
var shallow_clone = variable_clone(complex_struct, 1);
예제 5: 메서드와 상태 공유
var shared_struct = {
count: 0,
increment: function() { count++; }
};
var cloned_shared = variable_clone(shared_struct);
cloned_shared.increment();
이와 같은 다양한 예제를 통해 variable_clone
함수의 활용 가능성을 확인할 수 있습니다.