Using self.attribute for writing vs reading - confusion

Lets take this simple example

class NewBook

   attr_accessor :books

   def initialize
      @books = []
   end

   def some_method
      books[0] #( the reader for books works fine and will recall the
class value @books, however)

      books = [4,5,6,7] # ( books will not actually get assigned here
unless I do self.books = [4,5,6,7] )
   end

end

Why do you have to use self.books= on writer methods, but you can simply
put books on reader method.

Very confused. Any help would be great.

···

--
Posted via http://www.ruby-forum.com/.

In the case of "books = foo", ruby thinks books is a new locally
scoped variable. It's a ruby language "gotcha". To inform ruby that
you want to call the "book=" method on your object, you have to
explicitly mention the reciever: "self.book = foo"

OR, as long as you are in an instance method of that class, you can
just access the instance variable directly: "@book = foo"

···

On Apr 12, 10:28 pm, Aryk Grosz <tennisbum2...@hotmail.com> wrote:

Lets take this simple example

class NewBook

   attr_accessor :books

   def initialize
      @books =
   end

   def some_method
      books[0] #( the reader for books works fine and will recall the
class value @books, however)

      books = [4,5,6,7] # ( books will not actually get assigned here
unless I do self.books = [4,5,6,7] )
   end

end

Why do you have to use self.books= on writer methods, but you can simply
put books on reader method.

Very confused. Any help would be great.

--
Posted viahttp://www.ruby-forum.com/.

books = [1,2,3,4]
list = [5,6,7,8]

Which one is a setter method and which one is an assignment
to a local variable?

You have to use self.books so that the parser can
distinguish between a call to the setter method
and a local variable assignment. This is a side effect of
their being no need to declare local variables nor a sigil
for local variables (like @ and $ for instance and global
variables).

Gary Wright

···

On Apr 12, 2007, at 10:28 PM, Aryk Grosz wrote:

Why do you have to use self.books= on writer methods, but you can simply
put books on reader method.