Tag: reflection

Ruby Metaprogramming方法列表?

刚开始学习Ruby元编程。 看看Object.methods我得到: Object.methods => [ :allocate, :new, :superclass, :freeze, :===, :==, :, :<, :, :>=, :to_s, :included_modules, :include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, :instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, :singleton_class, […]

Ruby:attr_accessor生成的方法 – 如何迭代它们(在to_s中 – 自定义格式)?

我需要一个具有半自动’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’。 上面的’c.methods’调用返回字符串 – 我没有得到任何其他元数据? (在Java’方法’中是一个对象,我可以在其中进行进一步的reflection)。 我有一对多的关系我必须处理(’c’是其他对象类型的数组类型)。 这就是我想要做的:我想设计一个简单的Object,它有一个’to_s’,它将构建一个XML片段:例如。 1 Title Stuff …. 然后从这个简单的对象inheritance我的数据类:这样(希望)我得到一个mechansim来构建一个完整的XML文档。 我相信我也在这里重新发明轮子……所以其他久经考验的方法也值得欢迎。

返回自身的Ruby方法

我正在做一些反思,遇到了意想不到的障碍。 ruby(或rails)中是否有一个返回自身的对象方法 ruby-1.9.2> o = Object.new => # ruby-1.9.2> o.class => Object ruby-1.9.2> o.send :self NoMethodError: undefined method `self’ for # 我想要的是 ruby-1.9.2> o.send :self => # 这是内置的吗? 或者我是否需要扩展Object(它总是让我紧张开放对象): class Object def itself self end end 然后: ruby-1.9.2> o.send :itself => # 好吧,我想要实现的一些背景知识。 我的rails应用程序中有一个通用的表助手,如果是这样的话你会打电话: render_list @person, [{field: :name, link_to: :itself}, {field: {address: :name}, link_to: :address}] […]

如何在Ruby中查找类的每个实例

有没有办法在Ruby中获取某个类的所有对象? 澄清: class Pokemon end pikatchu = Pokemon.new charmander = Pokemon.new 那么,有没有办法可以以某种方式检索引用这两个对象( pikatchu和charmander )? 我实际上想通过初始化把它全部推到一个类数组中,但这可能会变大,我假设可能有一个原生的Ruby方法。

与Ruby相反的是什么?

如果我有一个类实例,包含几个包含的模块,我可以动态地取消包含一个特定的模块(为了替换它)? 谢谢。

关于Ruby中方法参数的思考

参加以下课程: class Automator def fill_specific_form(fields) fields.each_pair do |key, value| puts “Setting ‘#{key}’ to ‘#{value}'” end end end a = Automator.new a.fill_specific_form :first_name => “Mads”, :last_name => “Mobæk” # => Setting ‘first_name’ to ‘Mads’ # => Setting ‘last_name’ to ‘Mobæk’ 没有哈希可以做同样的事情吗? 由于所有参数都是必需的,我想要一个带有以下签名的方法: fill_specific_form(first_name, last_name) 在我看来,通过让方法体反映并迭代其参数,这将是可能的,从而实现相同的结果。 你会如何实现这个? 这种模式/习语是否已存在? 两个明显的好处是IDE中的参数信息,而不必检查是否提供了所有散列键。 我想避免的是: puts “Setting first_name to #{first_name}” puts “Setting […]

我可以在Ruby中动态调用数学运算符吗?

ruby中有这样的东西吗? send(+, 1, 2) 我想让这段代码看起来不那么多余 if op == “+” return arg1 + arg2 elsif op == “-” return arg1 – arg2 elsif op == “*” return arg1 * arg2 elsif op == “/” return arg1 / arg2

有没有办法在ruby 中返回方法参数名称

可能重复: 在Rubyreflection中获取参数名称 是否可以获取方法的参数名称? 示例: def method_called(arg1, arg2) puts my_method.inspect end 我想知道应该调用什么方法(my_method)来获得以下输出: [“arg1”, “arg2”]