Есть ли лучший способ проверить ноль или длину == 0 строки в Ruby? - PullRequest
166 голосов
/ 29 октября 2008

Есть ли лучший способ, чем следующий, чтобы проверить, является ли строка нулевой ИЛИ имеет длину 0 в Ruby?

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

В C # есть удобный

string.IsNullOrEmpty(myString)

Что-нибудь подобное в Ruby?

Ответы [ 15 ]

219 голосов
/ 30 октября 2008

Когда я не беспокоюсь о производительности, я часто использую это:

if my_string.to_s.empty?
  # It's nil or empty
end
67 голосов
/ 29 октября 2008

Если вы хотите использовать ActiveSupport, вы можете просто использовать метод #blank?, который определен как для NilClass, так и для String.

61 голосов
/ 29 марта 2012

Мне нравится делать это следующим образом (в среде, отличной от Rails / ActiveSupport):

variable.to_s.empty?

это работает, потому что:

nil.to_s == ""
"".to_s == ""
31 голосов
/ 29 октября 2008

Альтернативой предложению jcoby будет:

class NilClass
  def nil_or_empty?
    true
  end
end

class String
  def nil_or_empty?
    empty?
  end
end
29 голосов
/ 29 октября 2008

Как уже было сказано до того, как в Rails (ActiveSupport) есть удобный blank? метод, и он реализован так:

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

Довольно легко добавить в любой проект на основе ruby.

Прелесть этого решения в том, что оно автоматически работает не только для строк, но и для массивов и других типов.

15 голосов
/ 25 октября 2009

variable.blank? сделаю это. Он возвращает true, если строка пуста или если строка равна nil.

12 голосов
/ 29 октября 2008

nil? может быть опущено в логических контекстах. Как правило, вы можете использовать это для репликации кода C #:

return my_string.nil? || my_string.empty?
7 голосов
/ 29 октября 2008

Прежде всего, остерегайтесь этого метода:

Как Джесси Эзель говорит:

Брэд Абрамс

"Этот метод может показаться удобным, но большую часть времени я обнаружил, что эта ситуация возникает из-за попыток скрыть более глубокие ошибки.

Ваш код должен придерживаться определенного протокола об использовании строк, и вы должны понимать, как использовать этот протокол в коде библиотеки и в коде, с которым вы работаете.

Протокол NullOrEmpty, как правило, является быстрым решением (поэтому реальная проблема все еще где-то в другом месте, и вы используете два протокола), или это недостаток опыта в конкретном протоколе при реализации нового кода (и опять же, вы должны действительно знаю, что ваши возвращаемые значения). "

И если вы исправите класс String ... убедитесь, что NilClass также не был исправлен !

class NilClass
    def empty?; true; end
end
5 голосов
/ 29 октября 2008

У каждого класса есть nil? метод:

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

И строки имеют метод empty?:

if a_string.empty?
    # the string is empty
}

Помните, что строка не равна nil, когда она пуста, поэтому используйте метод empty?, чтобы проверить, пуста ли строка.

4 голосов
/ 12 марта 2018

Другой вариант - конвертировать ноль в пустой результат на лету:

(my_string||'').empty?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...