Programing

Ruby에서“foo = ()”메소드가 정의되어 있는지 어떻게 확인하나요?

lottogame 2020. 11. 1. 17:13
반응형

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

반응형