2013-07-21 2 views
1

자기 언어를 이해하려고합니다.자기 언어 깊은 복제 나 얕은 복제로 복제합니까?

의심의 여지가 있습니다. 자명 한 클론이나 얕은 자막으로 복제하든 상관 없습니다. 즉, 클론 개체 슬롯 또는 슬롯 안의 개체가 복제되는지 여부는 복제됩니다.

+0

얕은 사본을 의미합니까? – Tobias

+0

예. 나 자신을 깨끗하게하자. 자체 오브젝트 bankAccount를 고려하십시오. 그것이 accountholder라는 객체로 이루어져 있다고 가정 해보십시오. 나는 새로운 은행 계좌를 만들기 위해 은행 계좌를 복제했다고 생각해. 이제 내가 새 은행 계좌를 변경 한 경우. 계좌 소유자. 이름. 복제 된 원본 오브젝트 bankAcclount에 영향을 줍니까? – shakthi

답변

1

일반적으로 자체의 복제본은 얕은 복사본입니다.

댓글에 대해 예 변경됩니다. 그래서 "빈"프로토 타입을 복제합니다.

새로운 내용을 만들기 위해 원형을 복제 할 때 슬롯 내용을 선택적으로 복사하려면 copy-downs에 대해 잘 알고 있어야합니다.

+0

빠른 정보 주셔서 감사합니다. 솔직히 나는 카피 다운을 이해할 수 없었다. 초보자로서, 내가 가진 모든 것은 전문 용어이다 :'복사 다운은 자기 언어의 일부가 아니라 셀프 프로그래밍 환경의 메커니즘으로 데이터 멤버를 상속하는 문제를 해결한다. – shakthi

+0

글쎄, 셀프는 코드 공유가 아니라 프로토 타입을위한 클래스를 사용한다. 새 "실제"템플릿 객체를 만들기 위해 복제 한 템플릿 객체. 새로운 _prototypes_를 만들려면 오래된 것을 복제해야합니다. 이 경우 슬롯을 복사하려고합니다. 즉, 복사 방지가됩니다. 그것은 "자기 언어의 일부가 아니다"는 말은 복사 - 난 수가 언어 구성이 아니라 단순한 메시지라는 사실을 의미합니다. 어쨌든, 귀하의 경우에는 bankAccount를 복제 할 때 새로운'accountholder'를 복제하는 [_slot initializer_] (http://docs.selflanguage.org/4.5/langref.html#slot-descriptors)를 원할 것입니다. . – Tobias

+0

@thobias 작은 설명이 필요합니다. bankAccount에 parent bankAccountTrait가 있습니다. BankAccountTrait에 "bankname"이라는 슬롯이 있다고 가정 해보십시오. bankAccount에 "bankname"을 설정하면 bankAccountTrait의 슬롯 값이 변경됩니까? 나는 대답이 아니오라고 생각한다. 그렇다면 어떻게하면 수신기가 수신기를 수정할 수 있는지 설명 할 수 있습니다. (단지 'self *'가 메소드의 부모로 전송됩니다.) – shakthi

3

Tobias가 말한 것처럼 일반적으로 copy 메시지는 얕은 사본으로 구현됩니다.

의미 상으로는 copy은 '안전하고 유용한 사본'을 의미합니다. 많은 객체의 경우 이것은 단순한 복사입니다.

개체는 traits clonable의 구현과 같은 순수한 얕은 복사 방법에 위임하거나 자신의 copy 슬롯을 사용하여 자신의 copy을 구현해야합니다.

예를 들어, 모프는 일반적으로 copy 메시지에 응답하며, 얕은 복사본이 아닌 사용 가능한 복사본을 제공합니다. 또한 복사해서는 안되는 객체는 종종 copy = (self) 메소드를 구현하거나 위임하므로 복사를 시도하면 원래 객체가 반환됩니다.

엄격한 사본을 원할 경우 대부분의 복사 가능 개체는 clone으로 응답하지만주의해서 사용해야합니다. 그리고 기본에서는 VM 정의 원시 메소드 _Clone이 얕은 복사입니다.

+0

이 답변은 내 것보다 낫습니다. – Tobias

관련 문제