정확히
아니 질문에 대한 답변,하지만 당신은이 질문을 읽고, 당신이에 관심이있을 수는, 예를 들어 .instance_methods(false)
class Object
# This is more or less how Ruby does method lookup internally
def who_responds_to?(method, klass_ancestors = nil)
if klass_ancestors.nil?
return who_responds_to?(method, self.class.ancestors)
end
if klass_ancestors.empty?
return nil
end
if klass_ancestors[0].instance_methods(false).include?(method)
return klass_ancestors[0]
end
klass_ancestors.shift
who_responds_to?(method, klass_ancestors)
end
end
사용하는
class Person
end
module Drummer
def drum
end
end
module Snowboarder
def jump
end
end
module Engineer
def code
end
end
class Bob < Person
include Drummer
include Snowboarder
include Engineer
def name
end
end
puts "who responds to name"
puts bob.who_responds_to?(:name)
puts "\n"
puts "who responds to code"
puts bob.who_responds_to?(:code)
puts "\n"
puts "who responds to jump"
puts bob.who_responds_to?(:jump)
puts "\n"
puts "who responds to drum"
puts bob.who_responds_to?(:drum)
puts "\n"
puts "who responds to dance"
puts bob.who_responds_to?(:dance)
수율
who responds to name
Bob
who responds to code
Engineer
who responds to jump
Snowboarder
who responds to drum
Drummer
who responds to dance
[this line intentionally blank because return value is nil]
이것은 또한 모든 경우에 해당됩니다. – sawa
방금 답변을 업데이트했습니다. C로 정의 된 메서드 만 반환하려면 instance_methods의 첫 번째 매개 변수를 false로 설정하면됩니다. – arnaud576875
알았습니다. 나는 그 방법을 알고 있었지만 그러한 매개 변수를 취했다는 것을 알지 못했습니다. 감사. – sawa