2017-02-07 2 views
-1

私はクラスを持っており、インスタンス変数にアクセスしようとしましたが、私は@でそれをアドレス指定することで両方の方法でそれを行うことができます。私はそれを呼び出すときに何もエラーはありません@puts "name : #{name}"別のメソッドからRubyにアクセスするインスタンス変数

class Blabla 
    attr_accessor :name 

    def initialize(blabla) 
     @name = blabla 
    end 

    def populate() 
     puts "name : #{name}" 
     puts "name : #{@name}" 
    end 

end 
+2

1.これらは「クラスインスタンス変数」ではなく、通常のインスタンス変数です。用語は重要です。 2. 'attr_accessor:name'のために' attr_reader:name'と一緒に –

+0

を持っていますが、私はこの動作を避けることができますが、それでもインスタンス変数を読み取ることができる方法はありますか? – Tonja

+0

ええ、なぜあなたは 'attr_accessor' /' attr_reader'をそこに置いていますか? –

答えて

3

コメントで示唆したよう:

class Blabla  
    def name 
    @name 
    end 

    def name=(name) 
    @name = name 
    end 

    def initialize(blabla) 
    @name = blabla 
    end 

    def populate() 
    puts "name : #{name}" 
    puts "name : #{@name}" 
    end 
end 

#{name}の参照方法を:だから私たちは持っているあなたのコードを拡大

def name 
    @name 
end 

def name=(name) 
    @name = name 
end 

attr_accessor :name 

はの省略形ですは@nameを返します。

#{@name}参照@nameを直接参照してください。

また、attr_reader,attr_writerの方法を理解してください。

関連する問題