Ruby에 대한 국부 변수 정의가 어려운 오늘의 주의사항
6751 단어 Ruby
이 문장에 쓰다
루비 변수에 대한 undefined 동작 주의
계기
다음 설명은 API를 예로 들어 요청한 동물 정보를 되돌려줍니다.
animal = Cat.find_by(id: params[:cat_id]) if params[:cat_id].present?
animal = Dog.find_by(id: params[:dog_id]) if params[:dog_id].present?
return render json: [] if animal.blank?
〜以下省略〜
animal.blank?
두 개params[:cat_id] params[:dog_id]
가 없는 경우undefined 오류가 생길 줄 알았어요.
(이렇게)
[1] pry(main)> hoge.blank?
NameError: undefined local variable or method `hoge' for main:Object
from (pry):1:in `<main>'
결과에는 오류가 발생하지 않습니다.nil
.물론
nil
방법이 있기 때문에 오류가 발생하지 않습니다.왜?잘 이해하다
Ruby3.0.0 참조 안내서 변수 및 상수
다음 참조
성명은 실행하지 않아도 성명으로 간주된다.
v=1iffalse#는 값을 지정하지 않지만 유효합니다.
p defined?(v) # => "local-variable"
p v # => nil
식으로 평가되지 않아도 선언 자체가 평가됐나...
혼자서도 이해하기 힘들어요.이런 느낌은 역시 작법을 바꾸는 것이 좋다.
animal = Cat.find_by(id: params[:cat_id]) if params[:cat_id].present?
animal = Dog.find_by(id: params[:dog_id]) if params[:dog_id].present?
return render json: [] if animal.blank?
아니요.나는 이렇게 하면 비교적 쉽게 읽을 수 있다고 생각한다.
항상 보기에서 변수를 처리할 때 개의치 않는 것은
이번 업무의 구성원에 대해 코드 평론을 할 때 매우 신경을 쓴다.
조심해서 가.또 하나 배웠어!
animal = nil
animal = Cat.find_by(id: params[:cat_id]) if params[:cat_id].present?
animal = Dog.find_by(id: params[:dog_id]) if params[:dog_id].present?
return render json: [] if animal.blank?
[추적]댓글
animal = nil
에서 설명한 대로 해당 매개변수의 값을 수정합니다.자기 이해 부족으로 넣을 뻔한 코드.
다음 코드는 아무런 문제가 없습니다.
animal = Cat.find_by(id: params[:cat_id]) if params[:cat_id].present?
animal = Dog.find_by(id: params[:dog_id]) if params[:dog_id].present?
return render json: [] if animal.blank?
Reference
이 문제에 관하여(Ruby에 대한 국부 변수 정의가 어려운 오늘의 주의사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xxl/items/ab0351a068df1bc50a0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)