Ruby中的反射(Reflection)应用实例
在Java语言中,提供了发射机制,通过发射机制可以通过字符串构造出这个对象,可以获取对象的所有方法(包括私有方法),可以调用私有方法,可以更改成员变量的值(包括私有的成员变量)。
Ruby也是面向对象的高级语言,当然也提供了反射机制,今天我们讨论通过类名称构造类对象的功能。
一、通过类名称构造类对象
我们先看普通的构造:
moduleModuleA
#theclassname,laterwewilluseittocreatethecorrespondingobject
CLASS_NAME_OF_WOOD="ModuleA::Wood"
CLASS_NAME_OF_WOODDESK="ModuleA::WoodDesk"
CLASS_NAME_OF_WOODCHAIR="ModuleA::WoodChair"
classWood
definitialize
@desc="Iamaprimalwood"
end
defsay
puts@desc
end
end
classWoodDesk<Wood
definitialize
@desc="Iamadeskmadeofwood"
end
defsay_private
puts"actually,ihavesomebugbutnopublic"
end
public:say
private:say_private
end
classWoodChair<Wood
definitialize
@desc="Iamachairmadeofwood"
end
defsay_private
puts"IWantgetmarriedwithaWoodDesk..."
end
defsmile
puts"hahahhahhaha...."
end
public:say
private:say_private,:smile
end
end