2015-01-02 5 views
0

S4 개체가 항상 인수를 사용하여 만들어 지도록하는 가장 좋은 방법은 무엇입니까? 즉, 기본 생성자를 호출 할 수 없다는 의미입니다.기본 S4 클래스 생성자 비활성화

+0

'항상'의미하는 것이 명확하지 않습니다 (예 :'new()'의 처음 두 줄을 호출 할 수 있음,'initialize()'메소드 사용 안함) 또는 사용 사례가 무엇인지; 사용자는 규칙이나 모범 사례를 피하는 데 아주 창의적인 것처럼 보입니다. –

+0

올바른 구문이 새로운 경우 ('MyClass', a = 'a', b = 'b') 구문 new ('MyClass')가 사용되지 않도록하고 싶습니다. – rimorob

답변

0

매개 변수없이 새 ('MyType') 호출을 허용하지 않는 인수로 명시적인 '초기화'메소드를 만드는 것처럼 보일 것입니다. 이것이 내가 찾던 해결책이었던 것 같습니다.

1

사용자가 new()을 사용하고 싶지는 않지만 인수/힌트를 지정하고 문서를 제공 할 수있는 기능이라고 생각합니다. 이상적으로 사용자는 'S4 클래스'를 사용하고 있다는 개념이 없으며 다른 함수를 호출 할 수있는 객체를 반환하는 함수 만 호출하면됩니다. 내 선호 접근 방식은

.A = setClass("A", representation=representation(x="numeric")) 
A = function(x=numeric(), ...) { 
    ## user-friendly coercion/checks/etc to 'x' 
    .A(x=x, ...) 
} 
## accessors and other methods 

전용 패키지 NAMESPACE입니다. S4 클래스의 암시 적 요구 사항은 사실 validObject(new("A"))이 TRUE (예 : from earlier today)로 평가되므로 사용자가 이러한 방식으로 클래스를 생성하는 것을 허용하는 것을 피하는 것이 어렵게 보입니다.

+0

이 스타일의 불행한 것 같아요. R kludges. OO를 (가난한 사람, 해시를 근거로 한) 사람들에게 알려주지 만 사용자로부터 숨기고 사람들이 입력란에 입력이 없다고 생각하게하십시오. 이것은 내가하고 있었던 일입니다. '초기화'를 사용하여 원하는 작업을 수행 할 방법이 없습니까? – rimorob

+0

@rimorob 아니요, new ("A")'가 작동해야하기 때문에'initialize () '가 작동해야합니다. 비밀 메시지를 전달할 공간이 없습니다. –

관련 문제