ruby - Can I change an object's type inside its own methods? -
ruby - Can I change an object's type inside its own methods? -
it great if alter object's class within own methods like:
class dog < animal def initialize(color, size) #do stuff end def do_lots_of_stuff #really long involved calculations different classes , methods #and objects can't alter @ point if random_condition self = super_special_dog.new(@color, @size, specialness) end end end class super_special_dog < dog def initialize(color, size, specialness) #do stuff end end is there way convert instance of dog, 'fido', super_special_dog after fido.do_lots_of_stuff called, fido.is_a? super_special_dog homecoming true , other methods/classes can operate on fido super_special_dog's methods , variables on?
i tried above construction , got error can't alter value of self (syntaxerror). can create super_special_dog based on dog or on animal doesn't matter needs.
i can see other questions converting object outside own methods need inside. have 2k-3k lines of code intertwined hard alter @ point.
first of all, no 1 should care whether fido dog or super_special_dog - should care tricks fido can (that is, methods responds to). that's duck-typing (dog-typing?) way things.
if remove requirement actual class needs changed, it's trivial add together new functionality instance within itself.
class dog def become_special @special = true extend specialtraits end end module specialtraits def do_special_thing end end fido = dog.new rex = dog.new fido.become_special fido.do_special_thing # okay! rex.do_special_thing # nomethoderror ruby object type-conversion
Comments
Post a Comment