Ruby에서“foo = ()”메소드가 정의되어 있는지 어떻게 확인하나요?
Ruby에서는 foo = (bar) 메소드를 정의 할 수 있습니다.
irb(main):001:0> def foo=(bar)
irb(main):002:1> p "foo=#{bar}"
irb(main):003:1> end
=> nil
이제 정의되었는지 확인하고 싶습니다.
irb(main):004:0> defined?(foo=)
SyntaxError: compile error
(irb):4: syntax error, unexpected ')'
from (irb):4
from :0
여기에서 사용할 적절한 구문은 무엇입니까? "foo ="를 이스케이프 할 수있는 방법이 있다고 가정합니다. 이렇게하면 구문 분석되고 정의 된 항목에 올바르게 전달됩니다. 운영자.
문제는 foo=
방법이 할당에 사용되도록 설계 되었다는 것 입니다. defined?
다음과 같은 방법으로 진행 상황을 확인할 수 있습니다 .
defined? self.foo=()
#=> nil
defined? self.foo = "bar"
#=> nil
def foo=(bar)
end
defined? self.foo=()
#=> "assignment"
defined? self.foo = "bar"
#=> "assignment"
다음과 비교하십시오.
def foo
end
defined? foo
#=> "method"
foo=
메서드가 정의 되었는지 테스트하려면 respond_to?
대신 다음을 사용해야 합니다.
respond_to? :foo=
#=> false
def foo=(bar)
end
respond_to? :foo=
#=> true
메소드를 사용하여 메소드가 존재하는지 확인할 수 있으며 respond_to?
, 예 bar.respond_to?(:foo=)
를 들어 객체 bar
에 메소드가 있는지 확인 하기 위해 기호를 전달할 수 foo=
있습니다. 클래스의 인스턴스가 메서드에 응답하는지 알고 싶다면 method_defined?
클래스 (또는 모듈)에서 사용할 수 있습니다 (예 : Foo.method_defined?(:bar=)
.
defined?
메소드는 아니지만 피연산자의 설명을 반환하는 연산자입니다 (또는 정의되지 않은 경우 nil이므로 if 문에서 사용할 수 있습니다). 피연산자는 상수, 변수, 할당, 메서드, 메서드 호출 등과 같은 모든 표현식이 될 수 있습니다. 이렇게 할 때 작동하지 않는 이유 defined?(foo=)
는 괄호 때문에 건너 뛰고 더 많이 작동해야하기 때문입니다. 예상대로 이하입니다. 즉 defined?
, 꽤 이상한 연산자이며 아무도 그것을 사용하여 메서드의 존재를 테스트하지 않습니다.
참고 URL : https://stackoverflow.com/questions/2348521/in-ruby-how-do-i-check-if-method-foo-is-defined
'Programing' 카테고리의 다른 글
원래 생성 / 수정 된 타임 스탬프가있는 오래된 파일 체크 아웃 (0) | 2020.11.01 |
---|---|
임베디드 C ++ : STL 사용 여부? (0) | 2020.11.01 |
C ++에서 세분화 오류 수정 (0) | 2020.11.01 |
유틸리티 클래스는 정적이어야합니까? (0) | 2020.11.01 |
이진 표현에서 1의 수를 센다. (0) | 2020.11.01 |