是否有更好的方法检查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并不是一个真正的例外情况,所以应该这样处理。
你的旅费可能会改变。