2017-05-22 2 views
0

지정한 이름의 메서드가 정의되어 있는지 확인하려면 사용하려는 것이 더 좋으며 respond_to? 또는 defined?입니까?'respond_to?' 대 '정의 된?'

defined?은 내장 키워드이기 때문에 defined?을 사용하는 인수가있을 수 있지만 respond_to?은 방법이므로 빠른 것일 수 있습니다. 그러나 검사 할식이 간단한 방법으로 알려져있는 상황에서 defined?은 전체 식을 구문 분석해야하며 이는 인수를 받아 들일 필요가있는 respond_to?을 사용하는 것에 비해 단점이 될 수 있습니다 메서드 이름으로.

어느 것이 더 낫습니까? 고려해야 할 효율성 이외의 다른 요소가 있습니까?

답변

4

respond_to? 또는 defined?을 사용하는 것이 더 나은 지 여부를 확인하고 싶습니다.

도 아니다. 정말 사용하는 "더 나은"하는 질문이 아니다 Module#method_defined?

사용 (! 이름에도 불구하고)이 Object#respond_to? 방법이나 defined? 단항 접두사 연산자도 검사를 방법정의 여부 : 둘 여부를 확인 수신기 메시지으로 응답합니다. 이는 완전히 다른 것입니다.

Module#method_defined? 실제로 방법이 정의되어 있는지 여부를 확인합니다 :

class Foo 
    def method_missing(*) end 
    def respond_to_missing?(*) true end 
end 

foo = Foo.new 

defined? foo.bar 
#=> 'method' 

foo.respond_to?(:bar) 
#=> true 

Foo.method_defined?(:bar) 
#=> false