0

変数のスコープについて少し混乱しています。ルビーでテストプログラムを作成しました。

class Test 
        attr_reader :tester 
        def initialize(data) 
                @tester = data 
        end 

        def getData 
                 tester 
        end
end 

puts Test.new(11).getData

これでうまくいきます、attr_readerですが、attr_reader:testerを定義したので、@ tester=dataではなくtester=dataにできないのはなぜですか?getDataでデータを取得するときは、次のように書くだけで済みます。 @testerではなくtester

4

3 に答える 3

1

使用attr_readerはと同等です

class Test
  def initialize(data) 
    @tester = data 
  end 

  # attr_reader defines this method for you
  def tester
    @tester
  end

  def getData 
    tester 
  end
end

あなたのgetData方法では、usingtesterはと同等self.testerです。使用する場合@testerは、変数に直接アクセスします。使用するときはtester、getterメソッドを介して変数にアクセスします。

于 2012-10-05T09:34:32.197 に答える
0

attr_readerは、次のように読み取る必要があることを意味します。「対応するインスタンス変数のgetterメソッドとsetterメソッドが自動的に作成されます。」最初にデータを取得し、次にそのデータを設定します。

于 2012-10-05T09:36:16.940 に答える
0

some_name =明示的なレシーバーのない構文は、ローカル変数の割り当てとして解釈されます。インスタンス変数に割り当てるには、レシーバーを明示的に設定する必要がありselfます。この場合、self.tester =

于 2012-10-05T10:03:31.680 に答える