Существует ли лучший способ проверить ноль или длину == 0 из строки в Ruby?

168
задан snipsnipsnip 30 July 2018 в 13:31
поделиться

9 ответов

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

if my_string.to_s.empty?
  # It's nil or empty
end
223
ответ дан rnevius 23 November 2019 в 20:53
поделиться

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

68
ответ дан Avdi 23 November 2019 в 20:53
поделиться

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

class NilClass
  def nil_or_empty?
    true
  end
end

class String
  def nil_or_empty?
    empty?
  end
end
31
ответ дан Rômulo Ceccon 23 November 2019 в 20:53
поделиться

Как это было сказано здесь, прежде чем направляющие (ActiveSupport) имеют удобное пробел? метод и это реализованы как это:

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

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

красота этого решения состоит в том, что оно работает auto-magicaly не только для Строк, но также и для Массивов и других типов.

30
ответ дан Honza 23 November 2019 в 20:53
поделиться

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

return my_string.nil? || my_string.empty?
13
ответ дан Konrad Rudolph 23 November 2019 в 20:53
поделиться

В первую очередь, остерегайтесь того метода:

Как Jesse Ezel говорит:

Brad Abrams

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

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

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

И если Вы исправляете Строковый класс... быть уверены , NilClass не был патчем ни один !

class NilClass
    def empty?; true; end
end
7
ответ дан VonC 23 November 2019 в 20:53
поделиться

У Konrad Rudolph есть правильный ответ.

, Если это действительно прослушивает Вас, патч обезьяны Строковый класс или добавляет его к классу/модулю по Вашему выбору. Это действительно не, хорошая практика обезьяне исправляет базовые объекты, если у Вас нет действительно неопровержимого довода все же.

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

Тогда можно сделать String.nilorempty? mystring

2
ответ дан jcoby 23 November 2019 в 20:53
поделиться

Каждый класс имеет nil? метод:

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

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

if a_string.empty?
    # the string is empty
}

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

5
ответ дан Jeremy Ruten 23 November 2019 в 20:53
поделиться

переменная.пусто? сделаю это. Он возвращает истину, если строка пуста или если строка равна нулю.

15
ответ дан 23 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: