有没有比以下方法更好的方法来检查字符串是否为nil或者Ruby中的长度为0?
if !my_string || my_string.length == 0
return true
else
return false
end
在C#中有方便的
string.IsNullOrEmpty(myString)
与Ruby类似的东西?
答案 0 :(得分:219)
当我不担心表现时,我会经常使用它:
if my_string.to_s.empty?
# It's nil or empty
end
答案 1 :(得分:67)
如果您愿意要求ActiveSupport,您可以使用#blank?
方法,该方法是为NilClass和String定义的。
答案 2 :(得分:61)
我喜欢这样做(在非Rails / ActiveSupport环境中):
variable.to_s.empty?
这是因为:
nil.to_s == ""
"".to_s == ""
答案 3 :(得分:31)
jcoby提案的替代方案是:
class NilClass
def nil_or_empty?
true
end
end
class String
def nil_or_empty?
empty?
end
end
答案 4 :(得分:29)
正如在Rails(ActiveSupport)之前所说的那样,它有一个方便的blank?方法,它实现如下:
class Object
def blank?
respond_to?(:empty?) ? empty? : !self
end
end
很容易添加到任何基于ruby的项目。
这个解决方案的优点在于它不仅适用于字符串,而且适用于阵列和其他类型。
答案 5 :(得分:15)
variable.blank?会做的。 如果字符串为空或字符串为nil,则返回true。
答案 6 :(得分:12)
nil?
。通常,您可以使用它来复制C#代码:
return my_string.nil? || my_string.empty?
答案 7 :(得分:7)
首先,要注意这种方法:
正如Jesse Ezel所说:
“这种方法似乎很方便,但大多数时候我发现这种情况来自于试图掩盖更深层次的错误。
您的代码应该坚持使用字符串的特定协议,您应该了解协议在库代码和您正在使用的代码中的使用。
NullOrEmpty协议通常是一个快速修复(所以真正的问题仍然在其他地方,你有两个协议在使用)或者在实现新代码时缺乏特定协议的专业知识(同样,你应该真的知道你的回报值是什么。)“
如果您修补String类...请确保NilClass has not been patch either!
class NilClass
def empty?; true; end
end
答案 8 :(得分:5)
每个班级都有一个nil?
方法:
if a_variable.nil?
# the variable has a nil value
end
字符串包含empty?
方法:
if a_string.empty?
# the string is empty
}
请记住,当字符串为空时,字符串不等于nil
,因此请使用empty?
方法检查字符串是否为空。
答案 9 :(得分:4)
另一个选择是动态地将nil转换为空结果:
(my_string||'').empty?
答案 10 :(得分:2)
Konrad Rudolph有正确的答案。
如果它真的让你烦恼,那么猴子修补String类或将它添加到你选择的类/模块中。除非你有一个非常令人信服的理由,否则修补核心对象真的不是一个好习惯。
class String
def self.nilorempty?(string)
string.nil? || string.empty?
end
end
然后你可以String.nilorempty? mystring
答案 11 :(得分:2)
这里有一些很好的答案,但你不需要ActiveSupport或猴子修补来解决这里的常见用例。例如:
my_string.to_s.empty? if defined? my_string
这将"做正确的事情"如果 my_string 为nil或空字符串,但如果未定义 my_string ,则不会引发NameError exception。这通常比较做作的人更可取:
my_string.to_s.empty? rescue NameError
或其更加冗长的同类,因为您 期待发生的事情应该真正保存例外情况。在这种情况下,尽管它可能是一个常见的错误,但未定义的变量实际上并不是一个特例,所以应该相应地处理它。
您的里程可能会有所不同。
答案 12 :(得分:1)
您尝试过优化吗?
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?
答案 13 :(得分:1)
如果您使用滑轨,则可以使用.as-console-wrapper { max-height: 100% !important; top: 0; }
#present?
因此,相反地,使用require 'rails'
nil.present? # ==> false (Works on nil)
''.present? # ==> false (Works on strings)
' '.present? # ==> false (Works on blank strings)
[].present? # ==> false(Works on arrays)
false.present? # ==> false (Works on boolean)
!present?
答案 14 :(得分:0)
对于标准高尔夫球手(需要ruby 2.3或更高版本):
if my_string&.> ""
p 'non-empty string'
else
p 'nil or empty string'
end
答案 15 :(得分:0)
您可以尝试使用#blank?
。
警告:当字符串由空格组成时,它将为您带来肯定:
nil.blank? # ==> true
''.blank? # ==> true
' '.blank? # ==> true
'false'.blank? # ==> false
只想指出这一点。也许适合您的需求
UPD。为什么我的供稿中出现老问题? 抱歉,不能发布。