ruby - understand self for attr_accessor class method -


class test   class << self     attr_accessor :some      def set_some       puts self.inspect       = 'some_data'     end     def get_some       puts self.inspect           end   end end  test.set_some => test puts test.get_some.inspect => test nil 

here above find self test not returning some_data output.

but while modified in following way returns expected output

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 

what differences?

edit

now in first example if set some method as

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

now made me more confused.

some = :foo makes ruby think should create new local variable name some. if want call some=(), have use explicit reciever - in self.some = :foo. once lost bet on that... :-/


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -