반응형
존재하는 경우에만 메서드 호출
메서드가 존재하는 경우에만 단순히 메서드를 호출하는 숨겨진 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.a
및 A.b
하지, 당신은 할 수 A.a rescue A.b rescue A.c
그것은 마법처럼 작동합니다. 그래도 어리석은 규칙을 어길 것입니다.
참고 URL : https://stackoverflow.com/questions/15787610/call-method-only-if-it-exists
반응형
'Program Tip' 카테고리의 다른 글
Boost.ASIO 기반 HTTP 클라이언트 라이브러리 (예 : libcurl) (0) | 2020.12.05 |
---|---|
"n + k 패턴"이란 무엇이며 Haskell 2010에서 금지 된 이유는 무엇입니까? (0) | 2020.12.05 |
Meteor를 사용하는데 Angular가 필요한 이유는 무엇입니까? (0) | 2020.12.05 |
Windows의 내장 ZIP 압축을 스크립팅 할 수 있습니까? (0) | 2020.12.05 |
Spring 구성 디버깅 (0) | 2020.12.05 |