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
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.