2017-12-06 8 views
0

요즘 나는 R6에서 일부 항목을 코딩하고있는 동안 재미있는 질문을 던지면서 재미있는 질문을 던지기 시작했습니다.R6의 자체 메서드 호출과 개인 메서드 호출의 차이점

self$foo 

private$foo 

내가 해달라고하는 것은입니다 : private 메소드를 작성 (예 : foo는, 바의) 및 기타 공공 방법 내부를 호출 할 때 나도 사용하여 호출하는 경우 그것을 작동합니다 : R6에서 메소드를 호출하는 두 가지 방법의 차이점은 무엇입니까? 미리 감사드립니다. "소개 R6에 클래스"네트 (강조 광산)에서

답변

1

: 클래스의

self

내부 방법, self는 객체를 참조합니다. 개체의 공공 회원 (모두가 지금까지 본 적이)는 self$add()처럼 개인 회원가 액세스, self$x

public 멤버는 self에 액세스하는 반면

private

에 액세스 할 수 있습니다 private$queue 같은 private와.

그래서, self을 통해 당신 액세스 개인 방법, 당신은 private를 통해해야 할 경우에도 마찬가지입니다. 문서가 어떻게 그렇게 작동해서는 안된다고 말하는지를 보면서 사라질 수있는 행동에 의존하지 마십시오.

말했다

, 나는 self를 사용하여 개인 메서드에 액세스 할 수 없습니다

library(R6) 

bar <- R6Class("bar", 
    private = list(
    foo = function() { 
     message("just foo it") 
    } 
), 
    public = list(
    call_self = function() { 
     self$foo() 
    }, 
    call_private = function() { 
     private$foo() 
    } 
) 
) 

b <- bar$new() 
b$call_private() 
# just foo it 
b$call_self() 
# Error in b$call_self() : attempt to apply non-function 
+0

이 신속하고 명확한 답변을 주셔서 감사합니다! – Erdi