My class is defined as,
class Memory < Array
and I need to override the []= method.
I tried something like,
def []=(address, value)
self[address] = Word.new(value)
end
which causes an infinite loop of course: ‘stack level too deep’.
How to do it right?
Il giorno Fri, 20 Apr 2012 16:22:07 +0900
“Gaurav C.” [email protected] ha scritto:
which causes an infinite loop of course: ‘stack level too deep’.
How to do it right?
Before defining the new method use alias_method to create a copy of the
original one with a different name:
class Memory < Array
alias_method :set_element, :[]=
def []= address, value
set_element address, value
end
end
I hope this helps
Stefano
Use the super keyword. It calls the method by the same name belonging
to a class or module higher in the “inheritance hierarchy”.
(Note that “super” and “super()” have different meanings - the second
form calls the method with no arguments, while the first with the same
arguments as passed to your method.)
def []=(address, value)
super(address, Word.new(value))
end
– Matma R.
On Fri, Apr 20, 2012 at 9:22 AM, Gaurav C. [email protected] wrote:
My class is defined as,
class Memory < Array
Please do not do this. Rather use composition to achieve what you want.
and I need to override the []= method.
If you do it, you need to override all manipulating methods because
otherwise it is not guaranteed that all elements in the Array will be
instances of Word.
Kind regards
robert