понять себя для attr_accessor class method

class Test
  class << self
    attr_accessor :some

    def set_some
      puts self.inspect
      some = 'some_data'
    end
    def get_some
      puts self.inspect
      some
    end
  end
end

Test.set_some => Test
puts Test.get_some.inspect => Test nil

Здесь, выше, я мог найти себя как сам тест, но не возвращал some_data в качестве вывода.

Но хотя я изменил его следующим образом, он возвращает ожидаемый результат

class Test
  class << self
    attr_accessor :some

    def set_some
      puts self.inspect
      self.some = 'some_data'
    end
    def get_some
      puts self.inspect
      self.some
    end
  end
end

Test.set_some => Test
puts Test.get_some.inspect => Test some_data

В чем различия ?

РЕДАКТИРОВАТЬ

Теперь в первом примере, если я установил метод get some как

Test.some = 'new_data'
puts Test.some.inspect #=> new_data
Test.set_some
puts Test.get_some.inspect => new_data

Теперь это меня еще больше сбило с толку.

6
задан kriysna 12 May 2011 в 03:06
поделиться