2014-03-26 19 views

回答

1

做如下:

object.class.instance_methods # => [:meth1, :meth2,...] 
object.instance_variables # => [:@var1, :@var2,..] 

現在下面會給你一個對象的所有變量的值。

object.instance_variables.map { |var| object.instance_variable_get(var) } 

文件是: -

+1

我發現附加'.sort'使得生活更容易掃描結果'.in stance_methods'和'.instance_variables'。 – pjs

+0

@pjs你說的沒錯。 –

+0

'grep'([doc](http://ruby-doc.org/core-2.1.0/Enumerable.html#method-i-grep))也很有幫助。假設你只想要包含一個問號(只能出現在最後)的方法:'User.instance_methods.grep/\?/'或者只是按名稱'.grep/^ to_ /'過濾。 –

0

要闡述什麼@Arup說:

  • 要獲取類或模塊定義的所有常量,使用MyClass.constants

  • 要獲取所有類變量(例如@@ a),請使用my_class.class_variables

  • 要獲取所有類的instance_variables(例如@a),請使用my_class.instance_variables

  • 要獲得所有的類方法,請使用my_class.singleton_class.instance_methods

  • 有時您只需要爲特定類(或方法,特定模塊)定義的常量,實例方法,類方法,類變量,類實例變量或實例變量。只檢索那些(即,排除由類或模塊的祖先定義的那些),可使用my_class.instance_methods(false)my_object.instance_variables(false)

module M 
    M_constant = "M constant" 
    def m_method 
    puts "M#m_instance_method" 
    end 
end 

class C 
    include M 
    attr_accessor :c_instance_variable 

    C_constant = "C constant" 

    @@c_class_variable = 4 

    def self.c_class_method1 
    puts "c_class_method1" 
    end 

    def c_method 
    @c_instance_variable = 0 
    puts "c_instance_method" 
    end 

    class << self 
    attr_accessor :c_class_instance_variable 
    @c_class_instance_variable = 5 
    def c_class_method1 
     puts "c_class_method1" 
    end 
    end 
end 

class D < C 
end 

對象

M.constants 
    #=> [:M_constant] 
C.constants 
    #=> [:A, :C_constant, :M_constant] 
C.constants(false) 
    #=> [:A, :C_constant] 
D.constants 
    #=> [:A, :C_constant, :M_constant] 
D.constants(false) 
    #=> [] 

C.class_variables 
    #=> [:@@c_class_variable] 
C.class_variables(false) 
    #=> [:@@c_class_variable] 
D.class_variables 
    #=> [:@@c_class_variable] 
D.class_variables(false) 
    #=> [] 

C.new.instance_variables 
    #=> [:@c_instance_variable] 
D.new.instance_variables 
    #=> [] 

M.instance_methods 
    #=> [:m_instance_method] 
C.instance_methods.size 
    #=> 57 
C.instance_methods(false) 
    #=> [:c_instance_variable, :c_instance_variable=, :c_method] 
D.instance_methods.size 
    #=> 57 
D.instance_methods(false) 
    #=> [] 

C.singleton_class.instance_methods.size 
    #=> 102 
C.singleton_class.instance_methods(false) 
    #=> [:c_class_method1, :c_class_instance_variable, 
    # :c_class_instance_variable=] 
D.singleton_class.instance_methods.size 
    #=> 102 
D.singleton_class.instance_methods(false) 
    #=> [] 
相關問題