2012-06-14 2 views
2

다음 코드는 NoMethodError을 인쇄합니다. 이유를 모르겠다. 비록 내가 전화하는 방법은 비공개이지만 클래스에서 호출하고 있습니다. 클래스 변수는 개인 변수/함수에 액세스 할 수 없습니까? Java에서이 작업을 수행 할 수 있습니다.왜 수업 내에서 개인 기능에 액세스 할 수 없습니까?

class Tester 
private 
    def func_pri 
    puts("From a private function") 
    end 

protected 
    def func_prot 
    puts("From a protected function") 
    end 

public 
    def func_pub 
    puts("From a public function") 
    end 

public 
    def caller(object) 
    object.func_pub 
    object.func_pri # This statement causes error 
    object.func_prot 
    end 
end 

o = Tester.new 
o.caller(o) 
+0

개체를 매개 변수로 사용하면이 메서드를 범위 외부에서 호출 할 수 있습니다. send를 사용하거나 호출자 메소드에서 self.fun_pri을 수행하십시오. – texasbruce

+0

어떤 언어입니까 (오, 루비였습니까)? 그리고 왜 함수에 전달합니까? 다른 을 호출 할 수 없다고 생각합니다! – Malkocoglu

답변

5

self에도 개체에 개인 메서드를 호출 할 수 없습니다. object. 부분을 제거하면 self으로 전화가 연결됩니다.

개인 메서드를 호출하려는 경우 항상 object.send(:func_pri)을 사용할 수 있습니다.

Ruby는 Java와 같은 언어와 매우 다릅니다. 자세한 내용은 http://www.ruby-doc.org/docs/ProgrammingRuby/, '클래스, 개체 및 변수'장, '액세스 제어'절을 참조하십시오.

+0

'자기'란 무엇입니까? –

+0

자바에서'this'와 유사합니다. 당신이 방법에 대한 수신기를 지정하지 않을 때, 그것은 자기 대신에 간다 (즉, 자기는 함축적 인 수신기이다) –

관련 문제