Program Tip

존재하는 경우에만 메서드 호출

programtip 2020. 12. 5. 10:30
반응형

존재하는 경우에만 메서드 호출


메서드가 존재하는 경우에만 단순히 메서드를 호출하는 숨겨진 Ruby / Rails-magic이 있습니까?

내가 전화하고 싶다고하자

resource.phone_number

하지만 리소스가에 응답하는지 미리 알 수 없습니다 phone_number. 이를 수행하는 방법은

resource.phone_number if resource.respond_to? :phone_number

잘못된 장소에서 사용하면 그다지 예쁘지 않습니다. try사용 방법 ( resource.try(:phone_number))에 따라 더 작동하는 것이 있는지 궁금합니다 .


표준 루비 구문이 만족스럽지 않다면 다음과 같이 자유롭게 할 수 있습니다.

class Object
  def try_outside_rails(meth, *args, &cb)
    self.send(meth.to_sym, *args, &cb) if self.respond_to?(meth.to_sym)
  end
end

지금:

resource.try_outside_rails(:phone_number)

원하는대로 작동합니다.


나는 시도 할 것입니다 defined?( http://ruby-doc.org/docs/keywords/1.9/Object.html#defined-3F-method ). 당신이 요구하는 것을 정확히하는 것 같습니다 :

resource.phone_number if defined? resource.phone_number

나는 이것이 매우 오래된 게시물이라는 것을 알고 있습니다. 그러나 이것이 가능한 답이 될 수 있는지 그리고 그 영향이 동일한 지 알고 싶었습니다.

resource.try(:phone_number) rescue nil

감사


효율성에 대해 말할 수는 없지만 ...

Klass.methods.include?(:method_name) 

Rails 4에서 나를 위해 작동합니다.


경우 A.c정의됩니다 A.aA.b하지, 당신은 할 수 A.a rescue A.b rescue A.c그것은 마법처럼 작동합니다. 그래도 어리석은 규칙을 어길 것입니다.

참고 URL : https://stackoverflow.com/questions/15787610/call-method-only-if-it-exists

반응형