2012-01-17 3 views
37

이 클래스들의 차이점은 무엇입니까? 그 목적의 차이점은 무엇입니까?Ruby에서 Object와 BasicObject의 차이점은 무엇입니까?

+1

문서는 첫 번째 부분에 답합니다. BasicObject는 기능이 적어서 Object 메서드 대신 여러 Object 메서드를 제거해야 할 경우 Object 대신 사용할 수 있습니다. –

답변

55

BasicObject은 Ruby 1.9에 도입되었으며 Object의 부모입니다 (따라서 BasicObject은 Ruby의 모든 클래스의 상위 클래스입니다).

::new 
#! 
#!= 
#== 
#__id__ 
#__send__ 
#equal? 
#instance_eval 
#instance_exec 

BasicObject 위임자와 같은 객체 루비의 객체 계층 구조의 독립적 인 계층 구조, 프록시 객체를 만드는 데 사용할 수 있습니다

BasicObject

자체에 거의 방법이있다 클래스 또는 Ruby의 메소드와 클래스에서 네임 스페이스 오염이있는 다른 용도은 피해야합니다.

BasicObject에 커널 (puts와 같은 메소드 포함)이없고 BasicObject가 표준 라이브러리의 네임 스페이스 밖에 있으므로 전체 클래스 경로를 사용하지 않으면 공통 클래스를 찾을 수 없습니다. 내장 커널 기능 세계적으로 접근을 커널 모듈


객체 믹스. 객체 의 인스턴스 방법은 커널 모듈에 의해 정의되어 있지만 ...

당신이 Object 방법을 필요로하지 않으며, 당신이 그들을 다른 정의를 해제 할 경우이 경우 개체의 부모로 BasicObject을 사용할 수 있습니다

:

# when you inherit Object 
class Tracer 
    instance_methods.each do |m| 
    next if [:__id__, :__send__].include? m 
    undef_method m 
    end 

    # some logic 
end 

# when you inherit BasicObject 
class Tracer < BasicObject 
    # some logic 
end 
관련 문제