IT

클래스의 인스턴스 메서드 목록 가져 오기

lottoking 2020. 8. 31. 08:04
반응형

클래스의 인스턴스 메서드 목록 가져 오기


수업이 있습니다.

class TestClass
  def method1
  end

  def method2
  end

  def method3
  end
end

어떻게 (이 클래스 내 방법의 목록을 얻을 수 있습니다 method1. method2,, method3)?


그 자체 TestClass.instance_methods관심이 무엇을 만들 TestClass있는지에 있습니다.

class TestClass
  def method1
  end

  def method2
  end

  def method3
  end
end

TestClass.methods.grep(/method1/) # => []
TestClass.instance_methods.grep(/method1/) # => ["method1"]
TestClass.methods.grep(/new/) # => ["new"]

또는 호출에 대해 호출 할 수 있습니다 methods(아님 instance_methods).

test_object = TestClass.new
test_object.methods.grep(/method1/) # => ["method1"]

TestClass.methods(false) 

해당 클래스에만있는 메서드 만 가져옵니다.

TestClass.instance_methods(false) 주어진 예제에서 메서드를 반환합니다 (TestClass의 인스턴스 메서드이기 때문에).


TestClass.instance_methods

또는 상속 된 모든 메소드없이

TestClass.instance_methods - Object.methods

( 'TestClass.methods-Object.methods'였습니다.)


디버깅 이나 looksee 같은 보석을 사용하여 더 자세한 목록 (예 : 클래스를 정의하여 구조화 됨)을 얻을 수 있습니다 .


$ irb --simple-prompt

class TestClass
  def method1
  end

  def method2
  end

  def method3
  end
end

tc_list = TestClass.instance_methods(false)
#[:method1, :method2, :method3]
puts tc_list
#method1
#method2
#method3

Ruby Doc instance_methods 에 따르면

수신자의 공용 및 보호 된 인스턴스 메소드의 이름을 포함하는 배열을 리턴합니다. 모듈의 경우 이는 공용 및 보호 된 메소드입니다. 클래스의 경우 인스턴스 (단일 항목이 아님) 메서드입니다. 선택적 매개 변수가 false이면 조상의 메소드가 포함되지 않습니다. 공식 문서 예제를 사용하고 있습니다.

module A
  def method1()  
    puts "method1 say hi"
  end
end
class B
  include A #mixin
  def method2()  
     puts "method2 say hi"
  end
end
class C < B #inheritance
  def method3() 
     puts "method3 say hi"
  end
end

출력을 봅시다.

A.instance_methods(false)
  => [:method1]

A.instance_methods
  => [:method1]
B.instance_methods
 => [:method2, :method1, :nil?, :===, ...# ] # methods inherited from parent class, most important :method1 is also visible because we mix module A in class B

B.instance_methods(false)
  => [:method2]
C.instance_methods
  => [:method3, :method2, :method1, :nil?, :===, ...#] # same as above
C.instance_methods(false)
 => [:method3]

참고 URL : https://stackoverflow.com/questions/6468268/get-list-of-a-class-instance-methods

반응형