Есть ли лучший способ проверить Nil или Length == 0 строки в Ruby?
есть ли лучший способ, чем следующий, проверить, является ли строка нулевой или имеет длину 0 в Ruby?
if !my_string || my_string.length == 0
return true
else
return false
end
В C# есть удобный
string.IsNullOrEmpty(myString)
что-нибудь похожее на это в Ruby?
15 ответов
когда я не беспокоюсь о производительности, я часто использую этот:
if my_string.to_s.empty?
# It's nil or empty
end
Если вы готовы потребовать ActiveSupport вы можете просто использовать #blank?
метод, который определен как для NilClass, так и для String.
мне нравится делать это следующим образом (в среде без Rails/ActiveSupport):
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 (ActiveSupport) есть удобный пустой? метод и он реализуется следующим образом:
class Object
def blank?
respond_to?(:empty?) ? empty? : !self
end
end
довольно легко добавить в любой проект на основе ruby.
красота этого решения заключается в том, что оно работает автоматически не только для строк, но и для массивов и других типов.
переменной.пустой? будут делать это. Она возвращает true, если строка пуста или если строка равна нулю.
nil?
можно опустить в логических контекстах. Как правило, вы можете использовать это для репликации кода C#:
return my_string.nil? || my_string.empty?
каждый класс имеет nil?
способ:
if a_variable.nil?
# the variable has a nil value
end
и строк empty?
способ:
if a_string.empty?
# the string is empty
}
помните, что строка не равной nil
когда он пуст, поэтому используйте empty?
метод для проверки, если строка пуста.
Конрад Рудольф имеет правильный ответ.
Если это действительно вас беспокоит, исправьте класс строки или добавьте его в класс/модуль по вашему выбору. Это действительно не очень хорошая практика, чтобы обезьяна патч основных объектов, если у вас нет действительно веской причины, хотя.
class String
def self.nilorempty?(string)
string.nil? || string.empty?
end
end
затем вы можете сделать String.nilorempty? mystring
Проверьте пустые строки в обычном Ruby, избегая исключений NameError
здесь есть несколько хороших ответов, но вам не нужно ActiveSupport или monkey-patching для решения общего случая использования здесь. Например:
my_string.to_s.empty? if defined? my_string
это "делать правильные вещи", если my_string равен нулю или пустой строке, но не будет поднимать исключение NameError если my_string не определен. Это, как правило, предпочтительнее, чем больше придумано:
my_string.to_s.empty? rescue NameError
или его более подробный Ил, потому что исключения действительно должны быть сохранены для вещей, которые вы не ожидать. В этом случае, хотя это может быть распространенная ошибка, неопределенная переменная на самом деле не является исключительным обстоятельством, поэтому ее следует обрабатывать соответствующим образом.
ваш пробег может варьироваться.
вы пробовали изыски?
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?
для игроков в гольф кода (требуется ruby 2.3 или более поздней версии):
if my_string&.> ""
p 'non-empty string'
else
p 'nil or empty string'
end
в rails вы можете попробовать #blank?
.
предупреждение: это даст вам положительные результаты, когда строка состоит из пробелов:
nil.blank? # ==> true
''.blank? # ==> true
' '.blank? # ==> true
'false'.blank? # ==> false
просто хотел указать на это. Может быть, это соответствует вашим потребностям
UPD. почему я получаю старые вопросы в моей ленте? Извините за некропостинг.