그 조상 클래스에 의해 정의 된 모든 메소드와는 달리, 호출 된 Ruby 객체에 의해 정의 된 메소드 만 보여주는 루비 메소드 호출이 있는지 궁금합니다. 이는 methods
이하는 것처럼 보입니다.Ruby 객체의 메소드를 검사하려면 어떻게해야합니까?
17
A
답변
30
methods
은 선택적으로 부울 매개 변수를 취합니다.이 매개 변수는 개체의 클래스와 해당 수퍼 클래스 또는 개체의 단독 메서드에서 메서드를 나열할지 여부를 지정합니다. 따라서 obj.methods(false)
을 수행하여 obj
에 정의 된 싱글 톤 메서드 만 가져올 수 있습니다.
수퍼 클래스가 정의한 메소드가 아니라 객체 클래스가 정의한 메소드를 원할 경우 객체 클래스에 instance_methods(false)
을 호출하여 가져올 수 있으므로 obj.class.instance_methods(false)
입니다.
1
몇 가지 옵션이 있습니다. object.methods
, object.public_methods
, object.singleton_methods
... 원하는대로 선택할 수 있습니다.
# obj is the current object
parent = obj.class.superclass
methods = (obj.methods - parent.methods)
4
을 내가 obj.methods.sort
에 부분 해요하지만 당신은 또한 사용할 수 있습니다
을 기술로 다른 답변 중 일부는 어떤 경우에 더 나은 : 그들은 모두 배열을 반환 때문에, 당신은 뭔가를 시도 할 수도 있습니다 obj.methods.sort.grep /foo/
을 입력하여 regexp와 일치하는 메소드 이름을 찾으십시오. 원하는 정보가있을 때 유용합니다.
'parent = obj.class.superclass'를 의미합니까? – sepp2k
'whatever.methods'는 Ruby 버전에서'Array'를 리턴합니다. 'whatever.public_methods'와 동일합니다. – cHao
@ sepp2k - 예, 고맙습니다 - 해결되었습니다! – sethvargo