2010-12-13 6 views
2
class Test 
    def initialize 
    @var = "125" 
    end 
    def testmethod 
    puts @var 
    puts "accessing me from child class" 
    end 
end 

class TestExtension < Test 

    def method1 
    puts @var = "One Hundred and twenty five" 
    testmethod() 
    end 
end 

t = Test.new 
p = TestExtension.new 
p.method1 
t.testmethod 

출력 :인스턴스 변수

One Hundred and twenty five 
One Hundred and twenty five 
accessing me from child class 
125 
accessing me from child class 

내 질문입니다 TestExtension 클래스에서 선언되고 @var의 값에 접근하는 대신 값을 액세스하는 자식 클래스에 TestExtension 결과를 testmethod()에 접근하는 Test 클래스에 선언되었습니다. 맞습니까?

+1

(영어 텍스트의 모든 식별자 주변의 모든 코드 라인과 역 따옴표 전에 4 공백을 넣어). 자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/editing-help – Jakob

답변

3

짧은 답변 :

약간 더 이상 답 : 자신의 이름을 예를 당에서 알 수 있듯이
인스턴스 변수입니다. 모든 개체에 대해 액세스 할 코드가있는 클래스에 관계없이 @var이라는 변수가 하나만있을 수 있습니다.

+0

조용한 도움. 감사 :) –

0

입니다.

Gareth가 말했듯이 인스턴스 변수는 클래스가 아니라 인스턴스에 속합니다.

변수를 클래스에 속하게하려면 클래스 객체 (이 용어는 올바르게 작성하려면 복잡함) 클래스의 인스턴스 변수를 사용할 수 있습니다.

요약하면 Ruby의 모든 것은 클래스를 포함하여 객체입니다. 다음 예제에서 Base와 Derivative는 객체에 대한 참조를 포함하는 상수입니다. 이러한 객체는 클래스를 나타냅니다 (ta-da!). 계정에이 사실을 복용

, 우리는 다음과 같은 작업을 수행 할 수

코드 포맷
class Base 
    @var = 1 

    def self.change(new_value) 
    @var = new_value 
    end 

    def self.to_s 
    "#{self.name}, @var = #{@var}" 
    end 
end 

class Derivative < Base; end 

Derivative.change(2) 

puts Base   # => Base, @var = 1 
puts Derivative # => Derivative, @var = 2