Ruby에 이 defined?
변수 정의 여부를 확인할 수 있는 키워드입니다.
변수가 존재하는 경우 해당 유형을 가져옵니다. :
apple =1defined?(apple)# "로컬 변수"
그렇지 않으면 0이 됩니다. :
정의됨?(베이컨)# 없음
이것은 자바스크립트의 typeof
와 같습니다. 운영자. 객체의 클래스를 알고 싶다면 class
를 사용하세요. 대신 방법입니다.
몇 가지 흥미로운 점:
defined?
키워드입니다. , 메서드가 아님defined?
물음표로 끝나는 Ruby의 몇 안 되는 항목 중 하나이지만true
를 반환하는 일반적인 규칙을 따르지 않습니다. 또는false
defined?
nil 값과 이전에 설정한 적이 없는 변수의 차이를 구분할 수 있습니다.
이러한 특수 속성으로 인해 이 키워드는 학습할 가치가 있습니다.
정의된 변수를 확인하는 더 나은 방법
이 키워드는 유용할 수 있지만 몇 가지 문제가 있습니다.
왜?
낮은 연산자 우선순위 때문에 .
다음과 같이 하면:
<미리>정의? 오렌지 &&오렌지.크기결과는 "표현"입니다.
orange && orange.size
defined?
에 대한 인수로 해석됩니다. .
올바른 방법은 다음과 같습니다.
정의?(주황색) &&주황색.크기
Ruby에는 변수가 정의되었는지 여부를 확인하는 다른 방법이 있습니다.
로컬 변수의 경우 :
local_variables.include?(:주황색)
인스턴스 변수의 경우 :
instance_variable_defined?("@food")
하지만 당신은 그 어떤 것도 사용하고 싶지 않습니다.
99%의 경우 지역 변수가 누락된 경우 오타가 있거나 누군가가 해당 변수를 선언하는 것을 잊었습니다.
인스턴스 변수는 어떻습니까?
정의되지 않은 인스턴스 변수는 항상 nil
입니다. , 그래서 그것을 확인하고 싶습니다.
변수가 nil
이 아닌 경우에만 메서드를 호출하는 "safe navigator operator"(Ruby 2.3 이상)를 사용해 보세요. .
예시 :
if @user&.country =="스페인" # ...끝
다음과 동일 :
if @user [email protected] =="스페인" # ...end
이것들은 defined?
만큼 보편적이지 않습니다. 키워드이지만 더 예측하기 쉽고 오류가 발생하기 쉽습니다.
메소드가 정의되었는지 확인
defined?
를 사용할 수 있습니다. 메소드가 정의되어 있는지 확인하기 위한 것이지만 실용적이지 않습니다.
예 :
정의됨?(puts)# "메서드"
키워드이고 메소드가 아니기 때문에 객체와 함께 사용할 수 없습니다.
이것이 내 뜻입니다 :
[].defined?(:size)# 정의되지 않은 메소드 `정의?' []:배열
respond_to?
를 찾고 있습니까? 방법.
사용 방법은 다음과 같습니다. :
[].respond_to?(:size)# true[].respond_to?(:orange)# false
클래스가 있는지 확인
예 :
정의?(객체)# "상수"정의?(A)# 없음
더 나은 옵션은 const_defined?
를 사용하는 것입니다. 방법.
좋아요 :
Object.const_defined?(:String)# trueObject.const_defined?(:A)# false
요약
자, 주어진 변수, 클래스 또는 메소드가 존재하는지 확인하는 쉬운 방법을 배웠습니다!
변수로 작업할 때 가장 원하는 것은 nil
을 확인하는 것입니다. , 변수가 정의되었는지 여부 대신. 또는 변환 방법을 사용하여 변수를 알려진 클래스로 변환하는 것이 더 좋습니다.
이 기사가 유용했기를 바랍니다! 하셨다면 공유하세요. 더 많은 사람들이 즐길 수 있도록 합니다.