¿Hay una Mejor Manera de Comprobar Nil o Length == 0 de una Cadena en Ruby?
¿Hay una mejor manera que la siguiente para comprobar si una cadena es nil O tiene una longitud de 0 en Ruby?
if !my_string || my_string.length == 0
return true
else
return false
end
En C # está la práctica
string.IsNullOrEmpty(myString)
¿Algo similar a eso en Ruby?
15 answers
Cuando no estoy preocupado por el rendimiento, a menudo usaré esto:
if my_string.to_s.empty?
# It's nil or empty
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-14 22:18:49
Si está dispuesto a requerir ActiveSupport, puede usar el método #blank?
, que está definido tanto para NilClass como para String.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 20:05:06
Me gusta hacer esto de la siguiente manera (en un entorno no Rails/ActiveSupport):
variable.to_s.empty?
Esto funciona porque:
nil.to_s == ""
"".to_s == ""
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 21:06:14
Una alternativa a la propuesta de jcoby sería:
class NilClass
def nil_or_empty?
true
end
end
class String
def nil_or_empty?
empty?
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 19:14:22
Como se decía aquí antes de que Rails (ActiveSupport) tenga un práctico en blanco? método y se implementa así:
class Object
def blank?
respond_to?(:empty?) ? empty? : !self
end
end
Bastante fácil de añadir a cualquier proyecto basado en ruby.
La belleza de esta solución es que funciona automáticamente no solo para cadenas, sino también para matrices y otros tipos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 20:18:02
Variable.en blanco? lo haré. Devuelve true si la cadena está vacía o si la cadena es nula.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-25 07:18:24
nil?
se puede omitir en contextos booleanos. Generalmente, puede usar esto para replicar el código C#:
return my_string.nil? || my_string.empty?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 18:55:09
En primer lugar, cuidado con ese método:
Como Jesse Ezel dice:
"El método puede parecer conveniente, pero la mayoría de las veces he encontrado que esta situación surge de tratar de encubrir errores más profundos.
Su código debe atenerse a un protocolo en particular sobre el uso de cadenas, y debe comprender el uso del protocolo en el código de la biblioteca y en el código con el que está trabajando.
El protocolo NullOrEmpty es típicamente una solución rápida (por lo que el problema real está todavía en otro lugar, y tiene dos protocolos en uso) o es una falta de experiencia en un protocolo en particular al implementar nuevo código (y nuevamente, debería saber realmente cuáles son sus valores de retorno)."
Y si parcheas la clase String... asegúrese NilClass tampoco ha sido parche!
class NilClass
def empty?; true; end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 19:19:56
Cada clase tiene un método nil?
:
if a_variable.nil?
# the variable has a nil value
end
Y las cadenas tienen el método empty?
:
if a_string.empty?
# the string is empty
}
Recuerde que una cadena no es igual a nil
cuando está vacía, así que use el método empty?
para verificar si una cadena está vacía.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 18:52:26
Konrad Rudolph tiene la respuesta correcta.
Si realmente te molesta, monkey parchea la clase String o agrégala a una clase/módulo de tu elección. Realmente no es una buena práctica para monkey patch core objetos a menos que tenga una razón realmente convincente sin embargo.
class String
def self.nilorempty?(string)
string.nil? || string.empty?
end
end
Entonces puedes hacer String.nilorempty? mystring
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-29 19:07:54
Compruebe si hay Cadenas Vacías en Ruby Llano Mientras Evita las Excepciones de NameError
Hay algunas buenas respuestas aquí, pero no necesita ActiveSupport o monkey-patching para abordar el caso de uso común aquí. Por ejemplo:
my_string.to_s.empty? if defined? my_string
Esto de "hacer lo correcto" si my_string es igual a cero o una cadena vacía, pero no subirá NameError exception si my_string no está definido. Esto es generalmente preferible a lo más artificial:
my_string.to_s.empty? rescue NameError
O sus más prolijo, porque las excepciones deberían guardarse para cosas que no esperan que sucedan. En este caso, si bien podría ser un error común, una variable indefinida no es realmente una circunstancia excepcional, por lo que debe manejarse en consecuencia.
Su kilometraje puede variar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-20 04:58:18
Otra opción es convertir nil a un resultado vacío sobre la marcha:
(my_string||'').empty?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-12 10:51:16
¿Has intentado Refinamientos?
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?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-11 10:59:20
Para los golfistas de código (requiere ruby 2.3 o posterior):
if my_string&.> ""
p 'non-empty string'
else
p 'nil or empty string'
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-27 00:59:13
En rails puedes probar #blank?
.
Advertencia: le dará aspectos positivos cuando la cadena se compone de espacios:
nil.blank? # ==> true
''.blank? # ==> true
' '.blank? # ==> true
'false'.blank? # ==> false
Solo quería señalarlo. Tal vez se adapte a sus necesidades
UPD. ¿por qué estoy recibiendo viejas preguntas en mi feed? Perdón por el necroposting.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-30 14:02:55