2010-12-13 11 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という1つの変数しか存在できません。

+0

静かに役立ちます。ありがとう:) –

0

は、です。

ガース氏によると、インスタンス変数はインスタンスであり、クラスではありません。

変数をクラスに属したい場合は、クラスオブジェクトのインスタンス変数を使用することができます(誤って記述するのは複雑です)。

要するに、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 
関連する問題