end
s.play #=> “playing…”
s.stop #=> “stopped.”
#########################
How can I make s.stop produce a NoMethodError, ie., how can I reset Song
class prior to redefining it?
Besides, I would like to know how to undefine Song class, so that
Song.new produce a NameError, i.e., behaving as if it were never
defined.
The first question is (a little) straightforward, once you get a
handle on how open Ruby’s classes are.
To remove the ‘stop’ method, ‘reopen’ the class as you did when adding
‘stop’ in the first place:
class Song
undef stop
end
Removing the whole ‘Song’ constant is a little weirder. There is a
remove_const method, but you have to call it on the thing that
contains the constant you want to remove.
In this case, the thing above Song is Object.
Object.send(:remove_const, :Song)
Sorry for my poor explanation. Hopefully you won’t need to do this
very often. I never have. Heh.
The first question is (a little) straightforward, once you get a
handle on how open Ruby’s classes are.
To remove the ‘stop’ method, ‘reopen’ the class as you did when adding
‘stop’ in the first place:
class Song
undef stop
end
I want to remove (“undef”) all methods, no only a single one. That is
what I meant with “reset a class”.
Removing the whole ‘Song’ constant is a little weirder. There is a
remove_const method, but you have to call it on the thing that
contains the constant you want to remove.
In this case, the thing above Song is Object.
Object.send(:remove_const, :Song)
Sorry for my poor explanation. Hopefully you won’t need to do this
very often. I never have. Heh.
It is not exactly elegant, but indeed I think I won’t need it often. I
am inclined to using the “Object.send(:remove_const, :classname)”
solution in both cases, reset and undef.
Thank you very much.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.