Ruby,运行所有方法

时间:2012-02-23 19:28:53

标签: ruby methods symbols

是否可以运行并输出所有方法?不确定如何通过点运算符传递符号。因此,link.:node应该是link.node

而不是require 'mechanize' agent = Mechanize.new page = agent.get("http://stackoverflow.com/") link = page.link p meth = link.methods #=> [:node, :href, :attributes, :page, :referer, :click, :dom_id, :dom_class, :pretty_print, :inspect, :rel, :rel?, :noreferrer?, :text, :to_s, :uri, :pretty_print_cycle, :pretty_print_instance_variables, :pretty_print_inspect, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :pretty_inspect, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__] #this doesn't work. meth.each do |x| puts "#{x}: #{link.x}" end
{{1}}

2 个答案:

答案 0 :(得分:6)

如果要访问该类的方法,可以使用以下方法

调用私有方法

meth.each { |x| puts "#{x}: #{link.class.send(x)}" }

调用公共方法

meth.each { |x| puts "#{x}: #{link.send(x)}" }

使用参数或参数调用方法

meth.each { |x| puts "#{x}: #{link.class.send(x, params_or_arguments)}" }
meth.each { |x| puts "#{x}: #{link.send(x, params_or_arguments)}" }

答案 1 :(得分:3)

您可以使用send,但正如评论中指出的那样,很多方法都会出错:

meth.each { |x| puts "#{x}: #{link.send(x)}" }
顺便说一句:如果你正在努力学习Ruby,我写了一篇可能对你感兴趣的宝石:methodfinder