Есть ли лучший способ проверить ноль или длину == 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 ]

2 голосов
/ 20 августа 2014

Проверка наличия пустых строк в обычном Ruby при исключении исключений NameError

Здесь есть несколько хороших ответов, но вам не нужно ActiveSupport или мартышка-патчинг для решения общего случая использования здесь. Например:

my_string.to_s.empty? if defined? my_string

Это будет "делать правильные вещи", если my_string равно nil или пустой строке, но не вызовет исключение NameError , если my_string не определено , Это, как правило, предпочтительнее, чем более надуманный:

my_string.to_s.empty? rescue NameError

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

Ваш пробег может отличаться.

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

Конрад Рудольф имеет правильный ответ.

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

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

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

1 голос
/ 11 сентября 2018

Вы пробовали уточнения?

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?
0 голосов
/ 30 июля 2018

В рельсах вы можете попробовать #blank?.

Предупреждение: это даст вам положительные результаты, когда строка состоит из пробелов:

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

Просто хотел указать на это. Может быть, это соответствует вашим потребностям

UPD. почему я получаю старые вопросы в своей ленте? Извините за некропостинг.

0 голосов
/ 26 июля 2018

Для игроков в гольф с кодом (требуется ruby ​​2.3 или более поздняя версия):

if my_string&.> ""
  p 'non-empty string'
else
  p 'nil or empty string'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...