Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby에서 변수가 정의되었는지 확인하는 방법

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 &&@user.country =="스페인" # ...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을 확인하는 것입니다. , 변수가 정의되었는지 여부 대신. 또는 변환 방법을 사용하여 변수를 알려진 클래스로 변환하는 것이 더 좋습니다.

이 기사가 유용했기를 바랍니다! 하셨다면 공유하세요. 더 많은 사람들이 즐길 수 있도록 합니다.