source

루비에서 문자열의 0 또는 길이 == 0을 확인하는 더 좋은 방법이 있습니까?

nicesource 2023. 6. 3. 08:30
반응형

루비에서 문자열의 0 또는 길이 == 0을 확인하는 더 좋은 방법이 있습니까?

루비에서 문자열이 0인지 0인지 확인할 수 있는 다음보다 더 좋은 방법이 있습니까?

if !my_string || my_string.length == 0
  return true
else
  return false
end

C#에는 편리한 기능이 있습니다.

string.IsNullOrEmpty(myString)

루비에 있는 것과 비슷한 것이 있습니까?

성능에 대해 걱정하지 않을 때는 다음과 같이 자주 사용합니다.

if my_string.to_s == ''
  # It's nil or empty
end

물론 다양한 종류가 있습니다.

if my_string.to_s.strip.length == 0
  # It's nil, empty, or just whitespace
end

Active Support가 필요한 경우 다음을 사용할 수 있습니다.#blank?메서드, NilClass 및 String 모두에 대해 정의됩니다.

Rails/Active Support가 아닌 환경에서는 다음과 같이 작업합니다.

variable.to_s.empty?

다음과 같은 이유로 작동합니다.

nil.to_s == ""
"".to_s == ""

jcoby의 제안에 대한 대안은 다음과 같습니다.

class NilClass
  def nil_or_empty?
    true
  end
end

class String
  def nil_or_empty?
    empty?
  end
end

Rails(Active Support)에 편리한 빈칸? 방법이 있기 전에 여기에서 언급했듯이, 이 방법은 다음과 같이 구현됩니다.

class Object
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
end

루비 기반 프로젝트에 쉽게 추가할 수 있습니다.

이 솔루션의 장점은 문자열뿐만 아니라 배열 및 기타 유형에 대해서도 자동 마법처럼 작동한다는 것입니다.

변수.블랭크? 할 것입니다.문자열이 비어 있거나 문자열이 0인 경우 true를 반환합니다.

nil?부울 컨텍스트에서는 생략할 수 있습니다.일반적으로 이를 사용하여 C# 코드를 복제할 수 있습니다.

return my_string.nil? || my_string.empty?

무엇보다도, 그 방법에 주의해야 합니다.

제시 에젤의 처럼:

브래드 에이브럼스

"이 방법이 편리해 보일 수도 있지만, 대부분의 경우 이러한 상황이 더 깊은 버그를 은폐하려는 데서 발생한다는 것을 알게 되었습니다.

코드는 문자열 사용에 대한 특정 프로토콜을 준수해야 하며 라이브러리 코드와 작업 중인 코드의 프로토콜 사용을 이해해야 합니다.

NullOrEmpty 프로토콜은 일반적으로 신속하게 해결됩니다(따라서 실제 문제는 여전히 다른 곳에 있으며 두 개의 프로토콜을 사용하고 있습니다). 또는 새 코드를 구현할 때 특정 프로토콜에 대한 전문 지식이 부족합니다(반복하면 반환 값이 무엇인지 정말로 알아야 합니다)."

String 클래스를 패치하면...NilClass도 패치가 되지 않았는지 확인하십시오!

class NilClass
    def empty?; true; end
end

모든 수업은nil?방법:

if a_variable.nil?
    # the variable has a nil value
end

그리고 현악기는empty?방법:

if a_string.empty?
    # the string is empty
}

문자열이 같지 않음을 기억하십시오.nil비어 있을 때 사용합니다.empty?문자열이 비어 있는지 확인하는 메서드입니다.

다른 옵션은 0을 즉시 빈 결과로 변환하는 것입니다.

(my_string||'').empty?

Konrad Rudolph는 정답을 가지고 있습니다.

정말 방해가 된다면 String 클래스에 패치를 적용하거나 원하는 클래스/모듈에 추가합니다.하지만 정말로 설득력 있는 이유가 없는 한 핵심 개체를 원숭이로 패치하는 것은 좋은 관행이 아닙니다.

class String
  def self.nilorempty?(string)
    string.nil? || string.empty?
  end
end

그러면 할 수 있습니다.String.nilorempty? mystring

이름 오류 예외를 피하면서 일반 루비에서 빈 문자열 확인

여기에는 몇 가지 좋은 답변이 있지만, 일반적인 사용 사례를 해결하기 위해 액티브 지원이나 원숭이 패치가 필요하지 않습니다.예:

my_string.to_s.empty? if defined? my_string

my_string이 0이거나 빈 문자열인 경우 "올바른 작업"을 수행하지만 my_string이 정의되지 않은 경우 NameError 예외를 발생시키지 않습니다.이것은 일반적으로 더 고안된 것보다 더 바람직합니다.

my_string.to_s.empty? rescue NameError

또는 발생할 것으로 예상하지 못한 일에 대해 예외를 저장해야 하기 때문에 더 장황한 유사성이 있습니다.이 경우 일반적인 오류일 수 있지만 정의되지 않은 변수는 예외적인 상황이 아니므로 이에 따라 처리해야 합니다.

마일리지는 변동될 수 있습니다.

레일을 레을사경우는에를 할 수 .#present?

require 'rails'

nil.present?  # ==> false (Works on nil)
''.present?    # ==> false (Works on strings)
'  '.present?  # ==> false (Works on blank strings)
[].present?    # ==> false(Works on arrays)
false.present? # ==> false (Works on boolean)

그래서하려면 따라서인반길 0인지 0지확 0다니합을 합니다.!present?

!(nil.present?)  # ==> true
!(''.present?)    # ==> true
!('  '.present?)  # ==> true
!([].present?)    # ==> true
!(false.present?) # ==> true

개선을 시도해 보셨습니까?

module Nothingness
  refine String do
    alias_method :nothing?, :empty?
  end

  refine NilClass do
    alias_method :nothing?, :nil?
  end
end

using Nothingness

return my_string.nothing?

레일에서 시도할 수 있습니다.#blank?.

경고: 문자열이 공백으로 구성된 경우 다음과 같이 긍정적인 결과를 제공합니다.

nil.blank? # ==> true
''.blank? # ==> true
'  '.blank? # ==> true
'false'.blank? # ==> false

그냥 지적하고 싶었어요.아마도 당신의 필요에 맞을 것입니다.

UPD. 피드에 오래된 질문이 표시되는 이유는 무엇입니까?네크로 포스팅해서 미안합니다.

코드 골퍼의 경우:

if my_string=~/./
  p 'non-empty string'
else
  p 'nil or empty string'
end

또는 골프 선수가 아닌 경우(루비 2.3 이상 필요):

if my_string&.size&.positive?
  # nonzero? also works
  p 'non-empty string'
else
  p 'nil or empty string'
end

my_str=" 문자열에서 my_str.blank? 메서드를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/247948/is-there-a-better-way-of-checking-nil-or-length-0-of-a-string-in-ruby

반응형