자기 언어를 이해하려고합니다.자기 언어 깊은 복제 나 얕은 복제로 복제합니까?
의심의 여지가 있습니다. 자명 한 클론이나 얕은 자막으로 복제하든 상관 없습니다. 즉, 클론 개체 슬롯 또는 슬롯 안의 개체가 복제되는지 여부는 복제됩니다.
자기 언어를 이해하려고합니다.자기 언어 깊은 복제 나 얕은 복제로 복제합니까?
의심의 여지가 있습니다. 자명 한 클론이나 얕은 자막으로 복제하든 상관 없습니다. 즉, 클론 개체 슬롯 또는 슬롯 안의 개체가 복제되는지 여부는 복제됩니다.
일반적으로 자체의 복제본은 얕은 복사본입니다.
댓글에 대해 예 변경됩니다. 그래서 "빈"프로토 타입을 복제합니다.
새로운 내용을 만들기 위해 원형을 복제 할 때 슬롯 내용을 선택적으로 복사하려면 copy-downs에 대해 잘 알고 있어야합니다.
빠른 정보 주셔서 감사합니다. 솔직히 나는 카피 다운을 이해할 수 없었다. 초보자로서, 내가 가진 모든 것은 전문 용어이다 :'복사 다운은 자기 언어의 일부가 아니라 셀프 프로그래밍 환경의 메커니즘으로 데이터 멤버를 상속하는 문제를 해결한다. – shakthi
글쎄, 셀프는 코드 공유가 아니라 프로토 타입을위한 클래스를 사용한다. 새 "실제"템플릿 객체를 만들기 위해 복제 한 템플릿 객체. 새로운 _prototypes_를 만들려면 오래된 것을 복제해야합니다. 이 경우 슬롯을 복사하려고합니다. 즉, 복사 방지가됩니다. 그것은 "자기 언어의 일부가 아니다"는 말은 복사 - 난 수가 언어 구성이 아니라 단순한 메시지라는 사실을 의미합니다. 어쨌든, 귀하의 경우에는 bankAccount를 복제 할 때 새로운'accountholder'를 복제하는 [_slot initializer_] (http://docs.selflanguage.org/4.5/langref.html#slot-descriptors)를 원할 것입니다. . – Tobias
@thobias 작은 설명이 필요합니다. bankAccount에 parent bankAccountTrait가 있습니다. BankAccountTrait에 "bankname"이라는 슬롯이 있다고 가정 해보십시오. bankAccount에 "bankname"을 설정하면 bankAccountTrait의 슬롯 값이 변경됩니까? 나는 대답이 아니오라고 생각한다. 그렇다면 어떻게하면 수신기가 수신기를 수정할 수 있는지 설명 할 수 있습니다. (단지 'self *'가 메소드의 부모로 전송됩니다.) – shakthi
Tobias가 말한 것처럼 일반적으로 copy
메시지는 얕은 사본으로 구현됩니다.
의미 상으로는 copy
은 '안전하고 유용한 사본'을 의미합니다. 많은 객체의 경우 이것은 단순한 복사입니다.
개체는 traits clonable
의 구현과 같은 순수한 얕은 복사 방법에 위임하거나 자신의 copy
슬롯을 사용하여 자신의 copy
을 구현해야합니다.
예를 들어, 모프는 일반적으로 copy
메시지에 응답하며, 얕은 복사본이 아닌 사용 가능한 복사본을 제공합니다. 또한 복사해서는 안되는 객체는 종종 copy = (self)
메소드를 구현하거나 위임하므로 복사를 시도하면 원래 객체가 반환됩니다.
엄격한 사본을 원할 경우 대부분의 복사 가능 개체는 clone
으로 응답하지만주의해서 사용해야합니다. 그리고 기본에서는 VM 정의 원시 메소드 _Clone
이 얕은 복사입니다.
이 답변은 내 것보다 낫습니다. – Tobias
얕은 사본을 의미합니까? – Tobias
예. 나 자신을 깨끗하게하자. 자체 오브젝트 bankAccount를 고려하십시오. 그것이 accountholder라는 객체로 이루어져 있다고 가정 해보십시오. 나는 새로운 은행 계좌를 만들기 위해 은행 계좌를 복제했다고 생각해. 이제 내가 새 은행 계좌를 변경 한 경우. 계좌 소유자. 이름. 복제 된 원본 오브젝트 bankAcclount에 영향을 줍니까? – shakthi