在Ruby(不是Rails)的else if条件中检查变量是否为空的最佳方法是什么?
elsif not variable.to_s.empty?
# do something
end
或
elsif !variable.to_s.empty?
# do something
end
或
elsif variable.to_s.length > 0
# do something
end
答案 0 :(得分:32)
string = ""
unless string.to_s.strip.empty?
# ...
end
答案 1 :(得分:4)
我发现''.empty?
返回true
但' '.empty?
返回false
。即使to_s.length
' '
也不为零。
使用strip作为' '.strip.empty?
答案 2 :(得分:3)
您可以使用
unless var.empty?
#do sth
end
或
unless var == ""
#do sth
end
或所有这些if
和否定!
。
答案 3 :(得分:2)
empty?
方法的源类似于以下内容:
def empty?
return length == 0
end
因此,您可以放心使用
any_string.length != 0
无论如何,如果在else中使用该代码有点冗长,我鼓励您在present?
类内定义String
方法。
class String
def present?
!empty?
end
end
现在您可以通过以下方式编写代码:
if some_condition
# do something
elsif variable.to_s.present?
# do something else
end
通过这种方式,您可以得到清晰的代码,而无需使用难以阅读的negations
或unless
。
当然,这里有一个问题,我从Rails中获得了present?
的名称(和方法)。如果对象不是空白,present?
将返回true,但是带有制表符或空格(白色字符)的字符串将被视为空白。因此,对于以下字符串,此present?
将返回true:
"".present? # => false
" ".present? # => true
"\t\n\r".present? # => true
" blah ".present? # => true
这取决于您想要什么,很有可能您希望前三个字符串为true,之后的字符串为false。您可以使用@RamanSM方法并使用strip
来避免空格
class String
def present?
!strip.empty?
end
end
现在,present?
对于带有空格的字符串返回false
"".present? # => false
" ".present? # => false
"\t\n\r".present? # => false
" blah ".present? # => true
答案 4 :(得分:0)
如果您更喜欢 if
而不是 unless
...
如果您知道您的变量将是一个字符串...if str[0]
使用 nil check...if str && str[0]
OR 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
的使用。例外可以成为你的朋友。
答案 5 :(得分:-1)
对于未定义/未定义的字符串(例如abc),我们应检查abc.nil?
否则abc.blank?将抛出(NoMethodError)未定义的方法empty?
为nil:NilClass错误