[ruby-on-rails] Ruby에서 nil vs. empty vs. blank를 이해하는 방법

나 자신은 반복의 차이의 명확한 정의를 찾고 발견 nil?, blank?그리고 empty?루비 온 레일즈. 내가 가장 가까이 온 것은 다음과 같습니다.

  • blank?객체가 거짓, 비어 있거나 공백 문자열입니다. 예를 들어, "", " ", nil, [], 그리고 {}비어 있습니다.

  • nil? 객체는 NilClass의 인스턴스입니다.

  • empty?객체는 클래스마다 다르며 정의는 클래스마다 다릅니다. 문자열에 문자가 없으면 비어 있고 배열에 항목이 없으면 비어 있습니다.

빠뜨릴 수있는 것이 있습니까?



답변

.nil? 모든 객체에 사용할 수 있으며 객체가 nil이면 true입니다.

.empty? 문자열, 배열 및 해시에 사용할 수 있으며 다음과 같은 경우 true를 반환합니다.

  • 문자열 길이 == 0
  • 배열 길이 == 0
  • 해시 길이 == 0

.empty?nil 인 것을 실행 하면을 던질 것이다 NoMethodError.

곳이다 .blank?온다. 그것이 레일에 의해 구현 과 같은 모든 개체뿐만 아니라 작업에 작동 .empty?문자열, 배열 및 해시합니다.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? 비어 있지 않지만 공백 만 포함하는 문자열에서도 true를 평가합니다.

"  ".blank? == true
"  ".empty? == false

Rails는 또한 .present? 부정을 반환하는을 제공합니다.blank? .

배열 잡았다 : blank?리턴 false모든 경우에도 요소 배열이 비어 있습니다. 이 경우 공백, 사용 결정하기 all?blank?예를 들어, :

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 


답변

모든 경우에 유용한 테이블을 만들었습니다.

여기에 이미지 설명을 입력하십시오

blank?, present?레일에 의해 제공된다.


답변

Julian의 테이블을 확장하십시오.

여기에 이미지 설명을 입력하십시오

참고 : 비어 있습니까? 공백? 아니요? 傻傻 分不清楚


답변

빠른 팁 : !obj.blank? == obj.present?

일부 표현에서 눈에 편하고 더 쉬울 수 있습니다


답변

한 가지 차이점이 있다는 것입니다 .nil?.empty?반면, 프로그래밍 언어 루비가 제공하는 방법이 .blank?뭔가 추가 웹 개발 프레임 워크 레일에 의해이.


답변

여기에 이미지 설명을 입력하십시오

  • 이다 모든 nil?입니다blank?
  • 이다 모든 empty?입니다blank?
  • 이다 아무것도 empty?없다nil?
  • 이다 아무것도 nil?없다empty?

TL; DR -에만 사용 blank?present?당신을 구별하지 않으려면 """ "


답변

부울 값이 0인지 평가하려고 할 때 특별한 경우입니다.

false.present? == false
false.blank? == true
false.nil? == false

이 경우 권장 사항은 .nil?