2013-08-28 3 views
2
removeClass("A") 
setClass('A',representation=representation(a="numeric")) 

setMethod('initialize','A', function(.Object,...,a){ 

[email protected]=a 
.Object 
}) 

로 확인까지이 코드는 클래스 "B"의 정의에 실패 R은 상속

removeClass("B") 

setClass('B',representation=representation(b="numeric"),contains="A") 

여기에 setClass를 선언 할 수 없습니다, 그리고 난 .local의에서 (.Object를, ...)

오류가 어떤 객체를 생성하지 않고 : 인수를 "A"기본값은 없습니다 누락

내가 추가하면 그것은 실패하지 않습니다 initialize.A 메서드의 매개 변수에 대한 기본값.

이유를 설명 할 수 있습니까?

+0

"initialize.A 메서드에서 매개 변수의 기본값을 추가해도 실패하지 않습니다"라는 솔루션이 아닙니까? 어쩌면 당신이 좀보고 싶어 : http://stackoverflow.com/questions/18197214/how-to-define-an-s4-prototype-for-inherited-slots – sgibb

+0

이상한 것은 단지 setClass 라인을 추가하는 것입니다 .. . 개체를 만들지 않고도 오류가 트리거됩니다. 그리고 서브 클래 싱하는 코드를 재사용한다고 가정 해 봅시다. 수정하지 않을 것입니다. – user2725682

답변

1

"왜"는 까다로운 질문이며, 그 이유는 "그 이유는"그렇게 구현 되었기 때문입니다. 이 문제를 피하기 위해해야 ​​할 일을 묻는다면, (a) 생성자의 인수 a에 기본값을 제공하거나 (b) initialize 메소드 사용을 피하는 것입니다. 약간의 토론 here가 있습니다. 암시 적 계약은 new("A")이 성공합니다.

+0

답변 해 주셔서 감사합니다. 토론을 읽은 후, 상속을 통한 메소드 초기화를 피하는 것이 가장 좋습니다. – user2725682