是否有更好的方法检查Ruby的string的零或长度== 0?

有没有比以下更好的方式来检查一个string是否为零或在Ruby中的长度为0?

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

在C#中有方便

 string.IsNullOrEmpty(myString) 

任何类似于Ruby的东西?

当我不担心表演时,我会经常使用这个:

 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提议的另一种select是:

 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的项目。

这个解决scheme的优点在于,它不仅适用于string,而且适用于数组和其他types的自动魔术。

variable.blank? 会做的。 如果string为空或string为零,则返回true。

nil? 可以在布尔上下文中省略。 通常,您可以使用它来复制C#代码:

 return my_string.nil? || my_string.empty? 

首先,要小心这种方法:

正如Jesse Ezel所说:

布拉德艾布拉姆斯

“这个方法似乎很方便,但是大部分时候我发现这种情况是由于掩盖更深层的错误而产生的。

你的代码应该坚持使用string的特定协议,并且你应该理解在库代码和你正在使用的代码中协议的使用。

NullOrEmpty协议通常是一个快速的解决scheme(所以真正的问题还在其他地方,而且你有两个协议正在使用),或者在实现新的代码时缺乏特定协议的专业知识(再次,你应该知道什么你的回报值是)“。

如果你补丁string类…确保NilClass还没有补丁 !

 class NilClass def empty?; true; end end 

每classnil? 方法:

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

而弦乐empty? 方法:

 if a_string.empty? # the string is empty } 

请记住,一个string不nil时,它是空的,所以使用empty? 方法来检查一个string是否为空。

康拉德·鲁道夫有正确的答案。

如果真的有bug,猴子会修补String类或将其添加到您select的类/模块中。 除非你有一个真正令人信服的理由,否则猴子修补核心对象并不是一个好习惯。

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

那你可以做String.nilorempty? mystring String.nilorempty? mystring

检查纯Ruby中的空string,同时避免NameErrorexception

这里有一些很好的答案,但是你不需要ActiveSupport或猴子补丁来解决常见的用例。 例如:

 my_string.to_s.empty? if defined? my_string 

如果my_string是nil或空string,这将“做正确的事情”,但如果my_string未定义,则不会引发NameErrorexception 。 这通常比较人为的更可取:

 my_string.to_s.empty? rescue NameError 

或更详细的内容,因为例外应该真的被保存为你希望发生的事情。 在这种情况下,虽然这可能是一个常见的错误,但是一个未定义的variables并不是一个真正的例外情况,所以应该这样处理。

你的旅费可能会改变。