xml – Ruby:attr_accessor生成的方法 – 如何迭代它们(在to_s
发布时间:2020-12-16 07:50:18 所属栏目:百科 来源:网络整理
导读:我需要一个具有半自动’to_s’方法的Class(实际上生成 XML). 我想遍历我的’attr_accessor’行中设置的所有自动方法: class MyClass attr_accessor :id,:a,:b,:cendc=MyClass.new 到目前为止,我正在做一个基本的: c.methods - Object.methods= ["b","b=","
我需要一个具有半自动’to_s’方法的Class(实际上生成
XML).
我想遍历我的’attr_accessor’行中设置的所有自动方法: class MyClass attr_accessor :id,:a,:b,:c end c=MyClass.new 到目前为止,我正在做一个基本的: c.methods - Object.methods => ["b","b=","c","c=","id=","a","a="] 我面临一些挑战: >’id’可能会引起轻微的头痛 – 因为Object似乎已经有了’id’. 这就是我想要做的:我想设计一个简单的Object,它有一个’to_s’,它将构建一个XML片段:例如. <id> 1 </id> <a> Title </a> <b> Stuff </b> <c> <x-from-other-object> <x-from-other-object> .... </c> 然后从这个简单的对象继承我的数据类:这样(希望)我得到一个mechansim来构建一个完整的XML文档. 我相信我也在这里重新发明轮子……所以其他久经考验的方法也值得欢迎.
要从字符串中获取方法对象,可以使用方法方法或instance_method(其中方法将在对象上调用,而instance_method在类上调用).它给你的唯一有趣的信息是arity(与java相反,它也提供了返回值和参数的类型,这当然在ruby中是不可能的).
您的标题表明您只想迭代attr_accessor创建的方法,但您的代码将迭代您的类中定义的每个方法,如果您想在类中添加其他非访问方法,这可能会成为一个问题. 要摆脱这个问题和id的问题,你可以在attr_accessor周围使用自己的包装器来存储它为其创建访问器的变量,如下所示: module MyAccessor def my_attr_accessor *attrs @attrs ||= [] @attrs << attrs attr_accessor *attrs end def attrs @attrs end end class MyClass extend MyAccessor my_attr_accessor :id,:c def to_s MyClass.attrs.each do |attr| do_something_with(attr,send(attr)) end end end 对于问题3,你可以这样做 if item.is_a? Array do_something else do_something_else end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |