"nested" methods

Hi there,

I want to do this:

@myclass.items[5] = an_item

But the items object of @myclass should have an custom setter. I have
tried this:
class Myclass
    def items
        def []= value
            -code-
        end
    end
end

but this does not work. How can i do that?

cheers,
buhrmi

···

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

oh... ok

thanks

i hoped there would be a way without an new explicit class

···

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

I want to do this:

@myclass.items[5] = an_item

But the items object of @myclass should have an custom setter. I have
tried this:
class Myclass
    def items
        def = value
            -code-
        end
    end
end

but this does not work.

Your nested method is defined for Myclass. Basically something like nested methods does not exist in Ruby. The only difference is the point in time when the nested method will be defined (after the other method has been executed):

$ irb
irb(main):001:0> class M
irb(main):002:1> def x
irb(main):003:2> def y; 9; end
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> m=M.new
=> #<M:0x7ff8a1e0>
irb(main):007:0> m.y
NoMethodError: undefined method `y' for #<M:0x7ff8a1e0>
         from (irb):7
irb(main):008:0> m.x
=> nil
irb(main):009:0> m.y
=> 9
irb(main):010:0> m=M.new
=> #<M:0x7ff7888c>
irb(main):011:0> m.y
=> 9
irb(main):012:0>

How can i do that?

class Myclass
   def items
     @items ||=
   end
end

Now you have a member of type Array in Myclass and can use its method =.

You can as well do this

class Myclass
   class Items
     def = idx, val
       # whatever
     end
   end

   def items
     @items ||= Items.new
   end
end

Kind regards

  robert

···

On 27.07.2008 16:02, Stefan Buhr wrote:

Stefan Buhr wrote:

i hoped there would be a way without an new explicit class

There is:
class Myclass
  def items
    Object.new.instance_eval do
      def = index, value
        -code-
      end
      self
    end
  end
end
But using an "explicit class" is clearer.

HTH,
Sebastian

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Thank you very much that helped me alot.

···

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