2013-05-23 2 views

ответ

5

Поскольку обе линии выполнены в рамках A самого класса, в то время как hi и bye являются методы экземпляра этого класса. Попробуйте это:

module Test 
    class A 
    def hi 
     p 'hi' 
    end 

    def bye 
     p 'bye' 
    end 

    puts instance_methods(false) 
    end 
end 

# >> hi 
# >> bye 

Когда вы передаете false к instance_methods, вы учите его не включают в себя методы супер классов.

2

Я думаю, вы путать себя между method и instance_methods:

module Test 
    class A 
    def hi 
     p 'hi' 
    end 

    def bye 
     p 'bye' 
    end 

    puts instance_methods.sort 
    p '---------' 
    puts instance_methods.sort - Object.instance_methods 
    end 
end 

Выход:

[:!, :!=, :!~, :<=>, :==, :===, :=~, :__id__, :__send__, :bye, :class, :clone, :define_singleton_method, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :hi, :inspect, :instance_eval, :instance_exec, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :method, :methods, :nil?, :object_id, :private_methods, :protected_methods, :public_method, :public_methods, :public_send, :remove_instance_variable, :respond_to?, :send, :singleton_class, :singleton_methods, :taint, :tainted?, :tap, :to_enum, :to_s, :trust, :untaint, :untrust, :untrusted?] 
"---------" 
[:bye, :hi] 
Смежные вопросы