检查字符串是否为空的Ruby方法?
在Ruby(非Rails)中,检查else-if条件中的变量是否为空的最佳方法是什么 或 或 你可以用任何一种检查字符串是否为空的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作
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