检查字符串是否为空的Ruby方法?

检查字符串是否为空的Ruby方法?,ruby,Ruby,在Ruby(非Rails)中,检查else-if条件中的变量是否为空的最佳方法是什么 或 或 你可以用任何一种 unless var.empty? #do sth end 或 或者所有这些都带有if和否定符 我刚刚发现'.empty?返回true但'.empty?返回false。对于“的到_.length也不是零 string = "" unless string.to_s.strip.empty? # ... end 对于未定义/未定义的字符串(比如abc),最好使用strip作

在Ruby(非Rails)中,检查else-if条件中的变量是否为空的最佳方法是什么

你可以用任何一种

unless var.empty?
  #do sth
end


或者所有这些都带有
if
和否定符

我刚刚发现
'.empty?
返回
true
'.empty?
返回
false
。对于
到_.length
也不是零

string = ""

unless string.to_s.strip.empty?
  # ...
end
对于未定义/未定义的字符串(比如abc),最好使用strip作为
''.strip.empty?
,我们应该检查
abc.nil?

否则abc.blank?将为nil:NilClass错误抛出(NoMethodError)未定义的方法
empty?
empty?
方法的源与以下类似:

def空?
返回长度==0
结束
因此,您可以安全地使用

any_string.length!=0
无论如何,在else if中使用该代码有点冗长,我建议您在
String
类中定义
present?
方法

类字符串
你现在在吗?
!空的?
结束
结束
现在,您可以按以下方式编写代码:

如果某个条件
#做点什么
elsif变量是否存在?
#做点别的
结束
这样,您就可以得到一个清晰的代码,而不必使用
否定
,除非
谁是难以阅读的

当然,这里有一个问题,我从Rails获取了
present?
名称(和方法)
present?
如果对象不是空的,但带制表符或空格(白色字符)的字符串被视为空的,则返回true。因此,对于以下字符串,此
present?
将返回true:

"".present?       # => false
"   ".present?    # => true
"\t\n\r".present? # => true
" blah ".present? # => true
这取决于你想要什么,你很可能希望前3个字符串为真,后3个字符串为假。您可以使用@RamanSM方法并使用
strip
避免出现空白

类字符串
你现在在吗?
!脱衣舞,空的?
结束
结束
现在,
present?
对带空格的字符串返回false

"".present?       # => false
"   ".present?    # => false
"\t\n\r".present? # => false
" blah ".present? # => true

如果您更喜欢
If
而不是
,除非

如果您知道您的变量将是字符串…
如果str[0]

使用nil check…
if-str&&str[0]
if-str&.[](0)
(我更喜欢后者,但对某些人来说可能看起来很奇怪,需要Ruby>=2.3)

此外,我会非常小心地在任何事情上调用
#to_s
,因为你可能会得到意想不到的结果。如果
str
结果是你没有预料到的东西

str = false
str.to_s[0] # => 'f' (i.e. truthy)
str.to_s.empty? # => false

str = nil
str.to_s[0] # => nil (i.e. falsey)
str.to_s.empty? # => true

我认为这一警告同样适用于另一个答案中的
#to_s
。例外情况可以是你的朋友。

这些方法都应该有效。你是在问哪条路最好?我认为第二条路最地道。如果您使用的是rails,还可以执行
If variable.present?
If!variable.blank?
,它同时处理空字符串和nil。如果var为nil,两者都将失败。这不是问题的一部分。要检查这一点,只需执行以下操作:
除非var&&var.empty?
。这就是
。To_s
的作用(在原始帖子中)-处理nils。@goldylucks,以防您知道vatriable包含字符串。但变量可以是nil,在这种情况下,strip将产生错误。应将其称为“any”,以匹配列表和其他集合的情况。也。。。ugh:修补顶级课程。@TimbarStock备选方案非常感谢。哈哈。我的备选方案不会被认为是建设性的。:)
string = ""

unless string.to_s.strip.empty?
  # ...
end
"".present?       # => false
"   ".present?    # => true
"\t\n\r".present? # => true
" blah ".present? # => true
"".present?       # => false
"   ".present?    # => false
"\t\n\r".present? # => false
" blah ".present? # => true
str = false
str.to_s[0] # => 'f' (i.e. truthy)
str.to_s.empty? # => false

str = nil
str.to_s[0] # => nil (i.e. falsey)
str.to_s.empty? # => true