Pedro Del Gallego wrote:
> I've a question about the :parameter notation.
> I want to write a method that can hold several optional paramters
>
> add_book    :title=>"El quijote", :author=> "Miguel de Cervantes"
> add_book    :title=>"El quijote", :author=> "Miguel de Cervantes", 
> :tag=>"novel"
> add_book    :title=>"El quijote"
To have a method with optional variables, assign them to nil in the 
declaration.  If they aren't included in the method call, they will be 
set to nil.

def add_book(title, author = nil, tag = nil)
> but the interpreter said : ./bibliom.rb:7:in `add_book': undefined
> method `title' for {:title=>"El quijote", :author=>"Miguel de
> Cervantes"}:Hash (NoMethodError)
It gives you this error because you are using attr_writer, which is 
equivalent to a def attr= method.  In order to simply return a value, 
you should use attr_reader, or in case you want both, attr_accessor.

I think what you want is along the lines of:

class Book
    attr_accessor :title, :author, :tag

    def initialize(title, author = nil, tag = nil)
       self.title = title
       self.author = author
       self.tag = tag
    end

    def add_book
       puts "title: #{self.title} -- Author: #{self.author}"
    end
end